KVC内列,即Key-Value-Coding撵术,鍵值編碼。一個非正式的 Protocol话瞧,提供一種機制來間接訪問對象的屬性嫩与。
最基本的兩個方法:
setValue: 屬性值 forKey:屬性名:
valueForKey:屬性名:
舉個栗子
聲明一個有name,age屬性的User類
[user setValue:@"孫悟空" forKey:@"name"];
[user setValue:@"[NSNumber numberWithInt]" forKey:@"age"];
[user valueForKey: @"name"];
[user valueForKey:@"age"];
在KVC編程中交排,無論調(diào)用這兩個哪個方法划滋,都是通過NSString對象來指定被操作屬性的。
底層機制都是:
(1)程序優(yōu)先考慮調(diào)用“setName:屬性值”(valueForKey)代碼埃篓,通過setter(getter)方法完成設置处坪。
(2)如果沒有setName:方法,KVC機制會搜索該類名為_name的成員變量,無論該成員變量是在類接口部分定義同窘,還是在實現(xiàn)部分定義玄帕,也無論用哪個訪問控制符修飾,這條KVC代碼底層實際都是對_name成員變量的賦值想邦。
(3)如果既沒有setName:的方法裤纹,也沒有定義_name成員變量,KVC機制會繼續(xù)搜索該類名為name的成員變量丧没,無論該成員變量是在類接口部分定義鹰椒,還是在實現(xiàn)部分定義,也無論用哪個訪問控制符修飾,底層是對name成員變量的賦值呕童。
(4)如果還沒找到漆际,系統(tǒng)就會執(zhí)行該對象的setValue:forUndefinedKey:方法。
而這個方法需要重寫夺饲,否則會導致程序異常結束灿椅。
同理,valueForKey:@“name”方法機制如上钞支。