91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Foundation框架(5)字典轉模型

發布時間:2020-07-03 07:06:31 來源:網絡 閱讀:372 作者:ymanmeng123 欄目:移動開發
  • 字典對象與模型對象的轉換

從本地或者網絡獲取的數據,往往都是字典類型的。

     這些字典數據往往字段固定,且以數組的形式存儲。


使用字典可能會帶來一些不利:

     1. key不方便記憶且編譯器不進行正確性的驗證

     2. 不能進行一些對象的操作


解決的方法是:

     將固定字段的字典,封裝成自定義的對象,這種對象我們稱之為“模型”。


  • 字典轉模型的步驟

1)創建模型類

    屬性名應為對應詞典中的key字符串中的名字

    屬性類型應為詞典中對應value的類型。

    如:字典來自plist文件

    Foundation框架(5)字典轉模型

@interface AMMusicModel : NSObject

@property (nonatomic) NSString * song;
@property (nonatomic) NSString * singer;

@end

2)添加init及類方法創建模型類

@interface AMMusicModel : NSObject
@property (nonatomic) NSString * song;
@property (nonatomic) NSString * singer;
- (instancetype)initWithDictionary:(NSDictionary*) dict;
+ (instancetype)modelWithDictionary:(NSDictionary*) dict;
@end

3)將字典轉成模型對象,用屬性存儲

- (instancetype)initWithDictionary:(NSDictionary *)dict
{
    if ( self = [super init] ) {
        self.song = dict[@"dict"];
        self.singer = dict[@"singer"];
    }
    return self;
}
+ (instancetype)modelWithDictionary:(NSDictionary*) dict
{
    return [[self alloc] initWithDictionary:dict];
}

4)在持有模型對象的類中添加屬性,往往是數組

@interface AMMusicListModel : NSObject
@property (nonatomic) NSMutableArray * musicArray;
@end

并在適合的位置,創建該數組:

NSString *path = @".../music.plist";
NSArray * plistArray = [NSArray arrayWithContentsOfFile:path];
self->_musicArray = [NSMutableArray array];
for ( NSDictionary * dict in plistArray) {
    AMMusicModel * model = [AMMusictModel modelWithDictionary:dict);
    [self->_musicArray addObject:model];
}


  • 懶加載

    是一種延遲加載方式,在需要的時候才加載

    是一種內存調優的手段,能夠在一定程度上減少不必要內存的使用

    具體做法:重寫屬性的getter方法

- (NSMutableArray*) musicArray {
    if ( _musicArray == nil ) {
        NSString *path = @".../music.plist";
        NSArray * plistArray = [NSArray arrayWithContentsOfFile:path];
        self->_musicArray = [NSMutableArray array];
        for ( NSDictionary * dict in plistArray) {
            AMMusicModel * model = [AMMusictModel modelWithDictionary:dict);
            [self->_musicArray addObject:model];
        }
    }
    return _musicArray;
}



  • KVC

Key Value Coding,鍵值編碼協議NSKeyValueCoding,提供一種機制來間接訪問對象的屬性。

獲得值:

- (id)valueForKey:(NSString *)key

設置值:     

- (void)setValue:(id)value forKey:(NSString *)key

路徑訪問方式:

    存在復合關系時,通過 . 將屬性名連接成路徑訪問

     如下圖,對象employee1中 包含屬性manager ,而manager中包含其他屬性

     Foundation框架(5)字典轉模型

     可以通過路徑字符串 @”manager.employee1”訪問

- (id)valueForKeyPath:(NSString *)keyPath
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath


意義:

1)提供了對象屬性的另一種有效的訪問方式

2)為KVO提供了實現基礎

...


  • 模型轉字典

模型對象使用NSKeyValueCoding協議中的方法進行轉換

- (NSDictionary<NSString *,id> *)dictionaryWithValuesForKeys:(NSArray<NSString *> *)keys


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杂多县| 天柱县| 尼木县| 石家庄市| 赤峰市| 龙陵县| 淮阳县| 英吉沙县| 兰西县| 大英县| 元朗区| 永修县| 兴仁县| 尼玛县| 扬州市| 肇庆市| 潮州市| 呈贡县| 通江县| 西林县| 九龙坡区| 凤山县| 吉首市| 南平市| 河西区| 织金县| 沅江市| 安图县| 普安县| 五原县| 南投县| 罗定市| 吉安市| 吉隆县| 新民市| 华阴市| 武乡县| 萝北县| 临高县| 葫芦岛市| 齐齐哈尔市|