iOS setValue和setObject的區別
阿新 • • 發佈:2017-07-26
tro -i index data- pack ans string類型 地址 ack
在使用NSMutableDictionary的時候經常會使用setValue forKey與setObject forKey,他們經常是可以交互使用的,代碼中經常每一種的使用都有。
1.先看看setValue: forKey:
的定義
擴展NSMutableDictionary的一個類別,上面註釋說的很清楚,發送setObject:forKey 給接收者,也就是調用setObject:forKey方法,除非value為nil的時候,調用方法removeObject:forKey
2.看看setObject:forKey:
的定義
註意:
setObject:forKey:
中Key的對象是一個id類型,並不是NSString,只不過我們經常使用NSString而已。
3.總結兩者的區別:
- 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對象都有這個方法,所以可以用於任何類。
4.使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:對象someObj設置他的delegate屬性的值為當前類,當然調用此方法的對象必須要有delegate屬性才能設置,不然調用了也沒效果。
原文地址:http://blog.csdn.net/itianyi/article/details/8661997
鏈接:http://www.jianshu.com/p/8c9d31333b34
iOS setValue和setObject的區別