1. 程式人生 > >iOS 中 objectForKey與valueForKey 的區別

iOS 中 objectForKey與valueForKey 的區別

今天看到了這個東西,一直以來也不清楚,所以valueForKey基本不用。但是,又比較好奇,想搞清楚,就查了一些資料,算是理解了。

objectForKey:是NSDictonary的API,用於獲取這個HASH表中的某個key對應的物件,從NSDictionary的定義來看,這個Key可以是任何NSObject,不一定非得是NSString物件。這一點,大家可以驗證,從而引發另外一個問題:一個正常的NSDictionary物件,藉助於目前的JSON庫(官方的NSJsonSearialization,以及其它第三方的SBJson,xxJsonyyy等)有可能無法轉化為一個合規的(符合json RFC標準的)Json串。如下

NSDictionary* dic = [NSDictionarydictionaryWithObjectsAndKeys:@"obj1",@1,@"obj2",@"key",nil];

NSError* er;

NSData* da = [NSJSONSerializationdataWithJSONObject:dic options:NSJSONWritingPrettyPrintederror:&er];


valueForKey:其實我的理解,這個應該叫做 valueForKeyPath,用來與他的模式相應:KVO的,新增KVO的時候,使用的是addObserver:forKeyPath:xxxx  

objectForKey:是用來獲取HASH表容器中某個key的物件的,而不是獲取HASH表本身的一些屬性

valueForKey:是用來獲取某個物件的屬性值的,比方一個普通類的某個屬性[myObj valueForKey:@"myProperty"],作用類似於 myObj.myProperty或者[myObj getMyProperty]

valueForKey:對於物件來說,這個Key是死的,類定義的時候就已經確定了,以後不能更改

objectForKey:對於NSDictionary來說,這個Key是活的,隨時可以動態的增刪的。

--------------------------------------------------

又看了幾個別人的理解成果,覺得很不錯,再補一點 valueForKey與valueForKeyPath的區別

長的是短的升級版:可以級連取屬性值

valueForKey 其實應理解為valueForProperty

那麼[pObj valueForKeyPath:@"property1.property1deproperty11.property12deproperty22"]