kvc 與 kvo 是 objective c 的關鍵概念,個人認為必須理解的東西,下面是例項講解。
乙個物件擁有某些屬性。比如說,乙個 person 物件有乙個 name 和乙個 address 屬性。以 kvc 說法,person 物件分別有乙個 value 對應他的 name 和 address 的 key。 key 只是乙個字串,它對應的值可以是任意型別的物件。從最基礎的層次上看,kvc 有兩個方法:乙個是設定 key 的值,另乙個是獲取 key 的值。如下面的例子: ?12
3456
78910
1112
void
changename(person *p, nsstring *newname)
現在,如果 person 有另外乙個 key 配偶(spouse),spouse 的 key 值是另乙個 person 物件,用 kvc 可以這樣寫: ?12
3456
78910
1112
13void
logmarriage(person *p)
key 與 key pat 要區分開來,key 可以從乙個物件中獲取值,而 key path 可以將多個 key 用點號 「.」 分割連線起來,比如:
[p valueforkeypath:@
"spouse.name"
];
相當於這樣……
[[p valueforkey:@
"spouse"
] valueforkey:@
"name"
];
好了,以上是 kvc 的基本知識,接著看看 kvo。
key-value observing (kvo) 建立在 kvc 之上,它能夠觀察乙個物件的 kvc key path 值的變化。舉個例子,用**觀察乙個 person 物件的 address 變化,以下是實現的三個方法:
? 1 23
4567
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
60static
nsstring *
const
kvo_context_address_changed = @
"kvo_context_address_changed"
@implementation personwatcher
-(
void
) watchpersonforchangeofaddress:(person *)p
// whenever an observed key path changes, this method will be called
- (
void
)observevalueforkeypath:(nsstring *)keypath
ofobject:(id)object
change:(nsdictionary *)change
context:(
void
*)context
}
-(
void
) dealloc;
[m_observedpeople release];
m_observedpeople = nil;
[super dealloc];
}
-(id) init;
return
self;
}
@end
這就是 kvo 的作用,它通過 key path 觀察物件的值,當值發生變化的時候會收到通知。
優秀工程師 NSUserDefault
nsuserdefaults是什麼,有什麼用處 對於應用來說,每個使用者都有自己的獨特偏好設定,而好的應用會讓使用者根據喜好選擇合適的使用方式,把這些偏好記錄在應用包的plist檔案中,通過nsuserdefaults類來訪問,這是nsuserdefaults的常用姿勢。如果有一些設定你希望使用者即...
優秀工程師的素質
1.責任感 責任感是一種自覺主動履行分內分外一切有益事情的精神狀態。責任感作為心理學概念,屬於社會道德心理的範疇,是思想道德素質的重要內容。也是工程職業道德的基礎。2.人際交往能力 工程上的成功必定是團隊努力的結果。成功的工程師往往具有良好的人際交往能力。他們不僅需要和受教育程度高的工程師同行以及其...
優秀工程師應該具備哪些素質 優秀工程師的必備素質上
什麼是工程師?工程師是為解決問題而生的。應用工程技術科學和其他有關科學知識,解決工程技術中的各類具體問題。現代科技發展迅猛,使現代工程和工業生產出現了自動化 智慧型化 資訊化 動態化等許多新的特點。為了適應這些情況變化,工程師必須不斷提高自己的主觀在內素養,培養全面的技術能力和社會工作能力,建立合理...