IOS 中KVC的使用方法實例詳解
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供興山網(wǎng)站建設(shè)、興山做網(wǎng)站、興山網(wǎng)站設(shè)計、興山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、興山企業(yè)網(wǎng)站模板建站服務(wù),10年興山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
KVC是Key Value Coding的縮寫,意思是鍵值編碼。在iOS中,提供了一種方法通過使用屬性的名稱(也就是Key)來間接訪問對象的屬性方法。說的有的拗口,實際上就是通過類定義我們可以看到類的各種屬性,那么使用屬性的名稱我們就能訪問到類實例化后的對象的這個屬性值。
這個方法可以不通過getter/setter方法來訪問對象的屬性。因為一個類的成員變量如果沒有提供getter/setter的話,外界就失去了對這個變量的訪問渠道。而KVC則提供了一種訪問的方法,這個在某些場合會很有威力。
不多說了,上代碼:
@interface myPerson : NSObject { NSString *_name; int _age; int _height; int _weight; } @end
@interface testViewController : UIViewController @property (nonatomic, retain) myPerson *testPerson; @end
- (void)testKVC { testPerson = [[myPerson alloc] init]; NSLog(@"testPerson's init height = %@", [testPerson valueForKey:@"height"]); [testPerson setValue:[NSNumber numberWithInt:168] forKey:@"height"]; NSLog(@"testPerson's height = %@", [testPerson valueForKey:@"height"]); }
第一段代碼是定義了一個myPerson的類,這個類有一個_height的屬性,但是沒有提供任何getter/setter的訪問方法。同時在testViewController這個類里面有一個myPerson的對象指針。
當(dāng)myPerson實例化后,常規(guī)來說是無法訪問這個對象的_height屬性的,不過通過KVC我們做到了,代碼就是testKVC這個函數(shù)。
運行之后打印值就是:
2013-11-02 11:16:21.970 test[408:c07] testPerson's init height = 0 2013-11-02 11:16:21.971 test[408:c07] testPerson's height = 168
這就說明確實讀寫了_height屬性。
KVC的常用方法:
- (id)valueForKey:(NSString *)key; - (void)setValue:(id)value forKey:(NSString *)key;
valueForKey的方法根據(jù)key的值讀取對象的屬性,setValue:forKey:是根據(jù)key的值來寫對象的屬性。
這里有幾個要強(qiáng)調(diào)一下
1. key的值必須正確,如果拼寫錯誤,會出現(xiàn)異常
2. 當(dāng)key的值是沒有定義的,valueForUndefinedKey:這個方法會被調(diào)用,如果你自己寫了這個方法,key的值出錯就會調(diào)用到這里來
3. 因為類key反復(fù)嵌套,所以有個keyPath的概念,keyPath就是用.號來把一個一個key鏈接起來,這樣就可以根據(jù)這個路徑訪問下去
4. NSArray/NSSet等都支持KVC
以上就是IOS KVC的使用方法,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!