對setObject:forKey:與setObject:forKeyedSubscript:的理解

setObject:forKey:

聲明

- (void)setObject:(ObjectType)anObject forKey:(id<NSCopying>)aKey;
複製代碼

參數

  • anObject

anObjectaKey的值,dictionary強引用該對象。若是anObject是nil,會引起NSInvalidArgumentException的異常,若是你想傳一個空值在dictionary中,可使用NSNull表明空值bash

使用NSNull表明空值ui

NSNull *nilValue = [NSNull null];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:nilValue forKey:@"nilvalue"];
複製代碼
  • aKey aKey,會引起NSInvalidArgumentException的異常

setObject:forKeyedSubscript:

聲明

- (void)setObject:(ObjectType)obj forKeyedSubscript:(id<NSCopying>)key;
複製代碼

參數

  • object

objectaKey的值,dictionary強引用該對象。若是object爲nil,dictionary會將aKey的關聯的object移除spa

object爲nil,dictionary會將aKey的關聯的object移除code

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict[@"name"] = @"jack"; //@{@"name":@"jack"}
dict[@"name"] = nil;     //@{}
複製代碼
  • aKey aKey,會引起NSInvalidArgumentException的異常

說明

該方法和setObject:forKey:方法實現一樣的功能。你不須要直接代用該方法。當你使用下標賦值的時候,會調用該方法。對象

id value = @"someValue";
mutableDictionary[@"someKey"] = value; //等效於[mutableDictionary setObject:value forKeyedSubscript:@"someKey"];
複製代碼

總結

  • 當調用setObject:forKey:傳入nil的時候會崩潰,使用setObject:forKeyedSubscript:則不會
  • 若是調用setObject:forKey:須要傳遞空值,可使用NSNull
  • 使用下標賦值等效於調用setObject:forKeyedSubscript:方法
相關文章
相關標籤/搜索