NSDictionary細(xì)說(三)—— 字典的初始化

版本記錄

版本號 時(shí)間
V1.0 2017.08.27

前言

NSDictionary是不可變字典,它的不可變性可以參考NSArray數(shù)組吊奢,但是它與數(shù)組還是有很大不同键耕,盡管他們都屬于集合類,下面這幾篇我們繼續(xù)來將一下基礎(chǔ)類的知識斑鼻。還是老規(guī)矩從整體到局部,從淺入深進(jìn)行講解猎荠,謝謝大家坚弱。感興趣的可以參考我上面幾篇蜀备。
1. NSDictionary細(xì)說(一)—— 整體了解
2. NSDictionary細(xì)說(二)—— 字典的創(chuàng)建

一、- (instancetype)init;

很常見的對象初始化荒叶,沒什么說的了琼掠。

結(jié)論:簡單到爆,但是還是列出來了停撞。


二瓷蛙、- (NSDictionary<KeyType,ObjectType> *)initWithContentsOfFile:(NSString *)path;

這個(gè)和第二篇方法差不多,不多說了戈毒,直接給示例代碼艰猬。

- (void)demoInitWithContentsOfFile
{
    NSDictionary *dict = [[NSDictionary alloc ] initWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/Property List.plist"];
    NSLog(@"dict = %@", dict);
}

下面看輸出結(jié)果

2017-08-27 21:29:48.311 JJOC[9040:284512] dict = {
    One = 1;
    Three = 3;
    Two = 2;
}

結(jié)論:從文件路徑初始化字典。


三埋市、- (NSDictionary<KeyType,ObjectType> *)initWithContentsOfURL:(NSURL *)url;

該方法的作用:從指定的URL實(shí)例化字典冠桃。

還要注意:

  • 初始化的字典 - 可能與原始接收器不同 - 包含aURL中的字典,或者如果存在錯(cuò)誤或資源的內(nèi)容是字典的無效表示道宅,則為nil食听。
  • 由路徑標(biāo)識的文件中的字典表示只能包含屬性列表對象(NSString,NSData污茵,NSDate樱报,NSNumber,NSArray或NSDictionary對象)泞当。

結(jié)論:根據(jù)指定URL實(shí)例化字典迹蛤。


四、- (instancetype)initWithDictionary:(NSDictionary<KeyType,ObjectType> *)otherDictionary;

該方法的作用:根據(jù)給定的字典實(shí)例化新的字典襟士。

下面看一下示例代碼

- (void)demoInitWithDictionary
{
    NSDictionary *givenDict = @{@"One" : @"1", @"Two" : @"2"};
    NSDictionary *dict = [[NSDictionary alloc] initWithDictionary:givenDict];
    NSLog(@"dict = %@", dict);
}

看輸出結(jié)果

2017-08-27 21:36:17.024 JJOC[9310:291355] dict = {
    One = 1;
    Two = 2;
}

結(jié)論:根據(jù)給定字典實(shí)例化字典盗飒。


五、- (instancetype)initWithDictionary:(NSDictionary<KeyType,ObjectType> *)otherDictionary copyItems:(BOOL)flag;

該方法的作用是:使用另一個(gè)給定字典中包含的對象初始化新分配的字典陋桂。

下面看一下參數(shù)和返回值:

  • otherDictionary:包含用于初始化新詞典的鍵和值的字典逆趣。
  • flag:如果是YES,otherDictionary中的每個(gè)對象都會(huì)收到一個(gè)copyWithZone:消息來創(chuàng)建對象的副本必須符合NSCopying協(xié)議嗜历。 在托管內(nèi)存環(huán)境中宣渗,這不是對象否則會(huì)接收到的保留消息。 然后將對象副本添加到返回的字典秸脱。如果否NO落包,則在受管內(nèi)存環(huán)境中部蛇,otherDictionary中的每個(gè)對象在添加到返回的字典時(shí)都會(huì)收到一條保留消息摊唇。
  • return:一個(gè)初始化的對象 - 它可能與原始的接收器不同 - 包含在otherDictionary中找到的鍵和值。

還要注意:

  • 在這種不可變字典被初始化之后涯鲁,它不能被修改巷查。
    copyWithZone:方法執(zhí)行淺拷貝有序。 如果你有一個(gè)任意深度的集合,那么對于flag參數(shù)傳遞YES就可以執(zhí)行表面下面第一級的不可變拷貝岛请。 如果您通過NO旭寿,第一級的可變性不受影響。 在任何一種情況下崇败,所有更深層次的可變性都不受影響盅称。

下面看示例代碼

- (void)demoInitWithDictionaryCopyItems
{
    NSDictionary *givenDict = @{@"One" : @"1", @"Two" : @"2"};
    NSDictionary *dict = [[NSDictionary alloc] initWithDictionary:givenDict copyItems:NO];
    NSLog(@"dict = %@", dict);
}

下面看輸出結(jié)果

2017-08-27 21:44:45.139 JJOC[9577:299298] dict = {
    One = 1;
    Two = 2;
}

結(jié)論:根據(jù)給定的字典,實(shí)例化新的字典后室,這里帶flag標(biāo)志位缩膝。


六、- (instancetype)initWithObjects:(NSArray<ObjectType> *)objects forKeys:(NSArray<id<NSCopying>> *)keys;

該方法和第二篇中的方法類似岸霹,都是根據(jù)指定的key和value數(shù)組實(shí)例化新的字典疾层,這里只給出簡單示例代碼。

- (void)demoInitWithObjectsKeys
{
    NSArray *keys = @[@"One", @"Two"];
    NSArray *values = @[@1 , @2];
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
    NSLog(@"dict = %@", dict);
}

看輸出結(jié)果

2017-08-27 21:48:26.338 JJOC[9717:301860] dict = {
    One = 1;
    Two = 2;
}

結(jié)論:根據(jù)鍵值數(shù)組實(shí)例化多個(gè)鍵值對的新字典贡避。


七痛黎、- (instancetype)initWithObjects:(ObjectType _Nonnull const *)objects forKeys:(id<NSCopying> _Nonnull const *)keys count:(NSUInteger)cnt;

該方法和第二篇中的方法類似,都是根據(jù)C數(shù)組的鍵值和數(shù)目刮吧,實(shí)例化字典湖饱,這里只給出簡單的示例代碼。

- (void)demoInitWithObjectsCount
{
    static const NSInteger N_ENTRIES = 26;
    NSDictionary *asciiDict;
    NSString *keyArray[N_ENTRIES];
    NSNumber *valueArray[N_ENTRIES];
    NSInteger i;
    
    for (i = 0; i < N_ENTRIES; i++) {
        
        char charValue = 'a' + i;
        keyArray[i] = [NSString stringWithFormat:@"%c", charValue];
        valueArray[i] = [NSNumber numberWithChar:charValue];
    }
    
    asciiDict = [[NSDictionary alloc] initWithObjects:valueArray forKeys:keyArray count:N_ENTRIES];
    NSLog(@"asciiDict = %@", asciiDict);
}

下面看結(jié)果

2017-08-27 21:52:02.744 JJOC[9859:304372] asciiDict = {
    a = 97;
    b = 98;
    c = 99;
    d = 100;
    e = 101;
    f = 102;
    g = 103;
    h = 104;
    i = 105;
    j = 106;
    k = 107;
    l = 108;
    m = 109;
    n = 110;
    o = 111;
    p = 112;
    q = 113;
    r = 114;
    s = 115;
    t = 116;
    u = 117;
    v = 118;
    w = 119;
    x = 120;
    y = 121;
    z = 122;
}

結(jié)論:根據(jù)C數(shù)組鍵值對和數(shù)目杀捻,實(shí)例化新的字典琉历。


八、- (instancetype)initWithObjectsAndKeys:(id)firstObject, ...;

該方法和第二篇所寫類似水醋,都是根據(jù)值和鍵對的排序旗笔,實(shí)例化新的字典,下面我們看示例代碼拄踪。

- (void)demoInitWithObjectsAndKeys
{
    NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
    NSLog(@"dict = %@", dict);
}

看輸出結(jié)果

2017-08-27 21:56:37.045 JJOC[10083:308134] dict = {
    key1 = value1;
    key2 = value2;
}

結(jié)論:根據(jù)有序的值鍵排序蝇恶,實(shí)例化新的數(shù)組。

后記

簡單的都感覺自己浪費(fèi)時(shí)間了惶桐,但是為了照顧初學(xué)者還是不厭其煩的寫了撮弧,希望對需要的人有所幫助,未完姚糊,待續(xù)~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贿衍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子救恨,更是在濱河造成了極大的恐慌贸辈,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肠槽,死亡現(xiàn)場離奇詭異擎淤,居然都是意外死亡奢啥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門嘴拢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩盲,“玉大人,你說我怎么就攤上這事席吴《慕幔” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵孝冒,是天一觀的道長姑曙。 經(jīng)常有香客問我,道長迈倍,這世上最難降的妖魔是什么伤靠? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮啼染,結(jié)果婚禮上宴合,老公的妹妹穿的比我還像新娘。我一直安慰自己迹鹅,他們只是感情好卦洽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斜棚,像睡著了一般阀蒂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弟蚀,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天蚤霞,我揣著相機(jī)與錄音,去河邊找鬼义钉。 笑死昧绣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捶闸。 我是一名探鬼主播夜畴,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼删壮!你這毒婦竟也來了贪绘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤央碟,失蹤者是張志新(化名)和其女友劉穎税灌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垄琐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了经柴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狸窘。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坯认,靈堂內(nèi)的尸體忽然破棺而出翻擒,到底是詐尸還是另有隱情,我是刑警寧澤牛哺,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布陋气,位于F島的核電站,受9級特大地震影響引润,放射性物質(zhì)發(fā)生泄漏巩趁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一淳附、第九天 我趴在偏房一處隱蔽的房頂上張望议慰。 院中可真熱鬧,春花似錦奴曙、人聲如沸别凹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炉菲。三九已至,卻和暖如春坤溃,著一層夾襖步出監(jiān)牢的瞬間拍霜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工薪介, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沉御,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓昭灵,卻偏偏與公主長得像吠裆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子烂完,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容