OC是一門弱語言,是基於運行時的語言數組
當從Root爲array類型(數組裏面放置的是字典)的plist文件中讀取數據時緩存
好比獲取圖片的個數/前綴動畫
NSString *imageStrPre = dict[@"icon"];atom
int count = [dict[@"count"] intValue];spa
NSString *titleString = dict[@"desc"];.net
當@""裏面寫的內容與實際內容不符的時候,寫的時候,Xcode不會自行提示,靜態編譯的時候也不會報錯,當運行的時候,纔會知道你有錯誤,當你寫了不少的內容的時候,你很難發現哪裏出現錯誤.因此,咱們能夠根據Xcode中一個強大的功能--自動提示,在咱們編寫代碼的時候就知道哪裏錯誤.code
因此咱們須要新建一個類,繼承自NSObject,咱們能夠把咱們數組中的字典來轉換成一個對象orm
設置對象的屬性與字典中的key值一一對應,這樣咱們在讀取字典中的數據的時候就能夠用實例化的對象的屬性來取值,這樣Xcode就會自動提示對象的屬性來進行取值.對象
#import <Foundation/Foundation.h>繼承
@interface HMAnimationModel : NSObject
@property (nonatomic,copy)NSString *icon;
@property (nonatomic,copy)NSString *desc;
@property(nonatomic,assign)int count;
//字典轉換模型方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)animationModelWithDict:(NSDictionary *)dict;
@end
關於懶加載:
咱們在開發APP時,會盡可能的節省咱們的內存,因此咱們在讀取數據的時候,會根據路徑來讀取,而不是採用緩存的方式來讀取數據.
而爲了節省時間,咱們在用到數據的時候纔回去讀取數據,並且加載數據以後,之後再用到這個數據的時候就不須要再次加載.
這種狀況就叫作懶加載
懶加載一般是重寫get方法來實現的
//懶加載方法
- (NSArray *)dataArray{
if(nil==_dataArray){
//建立可變數組
NSMutableArray *arr=[NSMutableArray array];
//獲取文件路徑
NSString *filePath=[[NSBundle mainBundle] pathForResource:@"Images.plist" ofType:nil];
//經過文件路徑把文件存儲到數組中
NSArray *temp=[NSArray arrayWithContentsOfFile:filePath];
//數組中存放的都是字典 經過字典轉化爲模型
//遍歷數組,轉化爲模型
for (NSDictionary *dict in temp) {
//實例化模型
HMAnimationModel *model=[HMAnimationModel animationModelWithDict:dict];
//把模型存放到數組中
[arr addObject:model];
}
//賦值
_dataArray=arr;
}
return _dataArray;
}
當咱們用到數據的時候,經過點語法來調用咱們重寫的get方法來讀取數據,當咱們第二次調用點語法的時候,內部會判斷你是否讀取過數據,若是讀取過就不會再次讀取.這樣就大大節省了運行時間 .
並且咱們在開發APP的時候,要善始善終,在一個對象不用的時候,要及時釋放,以便節省內存,好比動畫播放完畢以後
//動畫執行完以後釋放內存
[_imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:count*0.1];