IOS KVC 知識梳理

2021-10-10 04:39:31 字數 2459 閱讀 9604

key-value-code 鍵值編碼 是乙個基於nskeyvaluecoding非正式協議實現的機制,它可以直接通過key值對物件的屬性進行訪問操作,不需要通過呼叫明確的訪問方法,這樣就是在執行時動態在訪問和修改物件的的屬性,如果愛實現了訪問器方法的類中點語法和kvc訪問物件差別不大,反之,怎kvc 就有優勢了。kvc 本質上是操作方法列表以及在記憶體中查詢例項變數。

通過關鍵字key來設值和取值,如果沒有找到set方法,會按照_key,_iskey,key,iskey的順序搜尋成員並進行賦值操作。

寫**驗證

testkvcobj *obj = [[testkvcobj alloc] init];

[obj setvalue:@"xiaomao" forkey:@"name"];

nslog(@"obj的名字是%@",[obj valueforkey:@"name"]);

設定可以訪問set集合

@inte***ce testkvcobj ()

@end

@implementation testkvcobj

+ (bool)accessinstancevariablesdirectly

- (id)valueforundefinedkey:(nsstring *)key

- (void)setvalue:(id)value forundefinedkey:(nsstring *)key

2020-11-02 17:35:38.165038+0800 learnkvc[8200:772417] obj的名字是xiaomao

設定不直接訪問set集合

@inte***ce testkvcobj ()

@end

@implementation testkvcobj

+ (bool)accessinstancevariablesdirectly

- (id)valueforundefinedkey:(nsstring *)key

- (void)setvalue:(id)value forundefinedkey:(nsstring *)key

2020-11-02 17:37:17.133987+0800 learnkvc[8217:773965] -[testkvcobj setvalue:forundefinedkey:]出現異常。該key不存在name

2020-11-02 17:37:17.134273+0800 learnkvc[8217:773965] -[testkvcobj valueforundefinedkey:]出現異常。該key不存在name

2020-11-02 17:37:17.134385+0800 learnkvc[8217:773965] obj的名字是(null)

kvc 的使用

1.動態取值和設值

例如批量取值操作

- (nsdictionary*)dictionarywithvaluesforkeys:(nsarray*)keys;
批量賦值操作

- (void)setvaluesforkeyswithdictionary:(nsdictionary*)keyedvalues;
2.訪問和修改私有變數

valueforkey:

setvalue forkey:

3.mode和字典的轉換

使用 kvc 進行字典轉模型

setvaluesforkeyswithdictionary

4.操作集合valueforkey

5.實現高階訊息傳遞

nsarray* arrstr = @[@"english",@"franch",@"chinese"];

nsarray* arrcapstr = [arrstr valueforkey:@"capitalizedstring"];

for (nsstring* str in arrcapstr)

2020-11-02 17:56:28.307124+0800 learnkvc[8302:785679] english

2020-11-02 17:56:28.307314+0800 learnkvc[8302:785679] franch

2020-11-02 17:56:28.307449+0800 learnkvc[8302:785679] chinese

參考資料

知識梳理計畫

知識的學習一般來說有兩個過程,第乙個是摳細節,理解知識,另乙個是將知識點進行總結歸納融入到自己的知識體系中。如果工作學習過程中需要用到該知識點的時候可以很快的提取出來。在這幾年的學習以及研究生活中,我也陸陸續續的鑽研過一些演算法,但是很多東西,都是當時懂了,但是過了一段時間,可能就忘記了,等到需要使...

Hive 知識梳理

1 order by,sort by,distribute by,cluster by 背景表結構 在講解中我們需要貫串乙個 例子,所以需要設計乙個情景,對應 還要有乙個表結構和填充資料。如下 有 3 個字段,分別為 personid 標識某乙個人,company 標識一家公司名稱,money 標識...

music 知識梳理

專案架構 vue init webpack vue music專案目錄介紹及其圖示字型,公共樣式等資源準備 src api common fonts image js stylus components router store main.js 修改package.json檔案 stylus 0.5...