国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

[iOS基礎控件-4.2]APP列表字典轉模型Model

2019-11-14 19:50:12
字體:
來源:轉載
供稿:網友
A.使用字典加載數據的缺點
1.用戶自行指定key,容易出錯
2.存入、取出都需要key,容易混亂
 
B.模型 (MVC中的model)
1.字典與模型對比:
(1)字典:存儲數據,通過字符串類型的key取值(容易寫錯,寫錯了key編譯器不會報錯)
(2)模型:存儲數據,自定義屬性存儲數據,其實就類似javaBean,本質是數據封裝
 
2.實現
(1)定義模型類
 1 @interface App : NSObject 2  3 /** 4  copy : NSString 5  strong: 一般對象 6  weak: UI控件 7  assign: 基本數據類型 8  */ 9 10 /**11  名稱12  */13 @PRoperty(nonatomic, copy) NSString *name;14 15 /**16  圖標17  */18 @property(nonatomic, copy) NSString *icon;19 @end
 
(2)使用模型讀取存儲、讀取數據
存儲:
 1 #pragma mark 取得應用列表 2 - (NSArray *) apps { 3     if (nil == _apps) { 4         // 1.獲得plist的全路徑 5         NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; 6         7         // 2.加載數據 8         NSArray *dictArray  = [NSArray arrayWithContentsOfFile:path]; 9        10         // 3.將dictArray里面的所有字典轉成模型,放到新數組中11         NSMutableArray *appArray = [NSMutableArray array];12         for (NSDictionary *dict in dictArray) {13             // 3.1創(chuàng)建模型對象14             App *app = [[App alloc] init];15            16             // 3.2 將字典的所有屬性賦值給模型17             app.name = dict[NAME_KEY];18             app.icon = dict[ICON_KEY];19            20             // 3.3 添加到app數組中21             [appArray addObject:app];22         }23        24         _apps = appArray;25     }26 27     return _apps;28 }
 
讀取:
1         iconView.image = [UIImage imageNamed:appData.icon];2         [appView addSubview:iconView];3        4         // 2.設置APP名字5         UILabel  *nameLabel = [[UILabel alloc] init];6         nameLabel.text = appData.name;
 
C.Model改進
     在ViewControl中解析、存儲數據, 增加了數據、類的耦合性,控制器關心太多,在Model被修改之后難以進行自我修改.
     解決 : ==> 所以在Model中解析數據
1.實現
(1)自定義帶數據參數的構造方法
聲明:
1 /**2  自定義構造方法3  通過字典來初始化模型對象4  */5 - (id) initWithDictionary:(NSDictionary *) dictionary;
 
實現:
1 - (id) initWithDictionary:(NSDictionary *) dictionary {2     if (self = [super init]) {3         self.name = dictionary[NAME_KEY];4         self.icon = dictionary[ICON_KEY];5     }6    7     return self;8 }
 
使用:
1             // 3.1創(chuàng)建模型對象2             App *app = [[App alloc] initWithDictionary:dict];3            4             // 3.2 添加到app數組中5             [appArray addObject:app];
 
(2)進一步提供類方法
1 + (id) appWithDictionary:(NSDictionary *) dictionary {2     // 使用self代表類名代替真實類名,防止子類調用出錯3     return [[self alloc] initWithDictionary:dictionary];4 }
 
D.使用”instancetype”代替”id"
id: 代指所有類型,但是使用不恰當的類型指針指向不匹配的對象時,編譯器不會報錯、警告,但在運行時很可能會出錯
Image
 
instantcetype:
1.能指向任何類型
2.編譯器能夠根據當前指向的對象,自動檢查變量類型是否正確,進而發(fā)出警告
3.只能作為返回值,不能用作參數

Image(4)

 
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宝丰县| 吉林省| 全州县| 常德市| 无为县| 霍山县| 南汇区| 翼城县| 太白县| 柏乡县| 新竹市| 惠东县| 霍邱县| 贡觉县| 镇江市| 芒康县| 万宁市| 吕梁市| 永城市| 兴海县| 高安市| 从江县| 马公市| 霍邱县| 邹平县| 白水县| 嘉义县| 瑞昌市| 萨嘎县| 浪卡子县| 林口县| 闽清县| 许昌县| 遂溪县| 凌云县| 厦门市| 商水县| 来宾市| 历史| 广元市| 修武县|