網上關於setValue和setObject的區別的文章很多,說的並不准確,首先我們得知道:
setObject:ForKey: 是NSMutableDictionary特有的;setValue:ForKey:是KVC的主要方法
話不多說,上代碼:
- (void)viewDidLoad {
[super viewDidLoad];
//setObject和setvalue的區別
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSMutableArray *array = [NSMutableArray array];
[array insertObject:@"1" atIndex:0];
[array insertObject:@"2" atIndex:1];
[dic setObject:[NSNull null] forKey:@"haha"];
[dic setObject:[NSNull null] forKey:array];
[dic setObject:[NSNull null] forKey:[NSNull null]];
[dic setObject:@1 forKey:@""];
[dic setObject:@"" forKey:@1];
[dic setObject:nil forKey:@""];
[dic setObject:@"" forKey:nil];
NSLog(@"dic:%@",dic);
//setobject中的key和value可以為除了nil外的任何對象
NSLog(@"*****************");
[dic removeAllObjects];
NSLog(@"dic:%@",dic);
[dic setValue:[NSNull null] forKey:@"haha"];
[dic setValue:[NSNull null] forKey:array];
[dic setValue:[NSNull null] forKey:[NSNull null]];
[dic setValue:@1 forKey:@""];
[dic setValue:@"" forKey:@1];
[dic setValue:nil forKey:@""];
[dic setValue:@"" forKey:nil];
[dic setValue:@"" forKey:@"hehe"];
[dic setValue:array forKey:@""];
NSLog(@"dic2:%@",dic);
//setValue中的KEY只能為字符串 value可以為nil也可以為空對象[NSNull null]
}
程序崩潰,原因就在這幾個警告,由代碼得出以下結論:
setobject中的key和value可以為除了nil外的任何對象
setValue中的key只能為字符串 value可以為nil也可以為空對象[NSNull null]以及全部對象
總結兩者的區別:
setObject:forked:中object是不能夠為nil的,不然會報錯。
setValue:forKey:中value能夠為nil,但是當value為nil的時候,會自動調用removeObject:forKey方法
setValue:forKey:中key的參數只能夠是NSString類型,而setObject:forKey:的可以是任何類型
注意:setObject:forKey:對象不能存放nil要與下面的這種情況區分:
[imageDictionary setObject:[NSNullnull] forKey:indexNumber];
[NSNull null]表示的是一個空對象,並不是nil,注意這點
setObject:forKey:中Key是NSNumber對象的時候,如下:
[imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
上面說的區別是針對調用者是dictionary而言的。setObject:forKey:方法NSMutabledictionary特有的,而setValue:forKey:方法是KVC(鍵-值編碼)的主要方法。
當 setValue:forKey:方法調用者是對象的時候: setValue:forKey:方法是在NSObject對象中創建的,也就是說所有的oc對象都有這個方法,所以可以用於任何類。
以上所述是小編給大家介紹的iOS中setValue和setObject的區別詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!