優秀工程師 KVC KVO

2021-08-09 06:26:35 字數 2632 閱讀 8808

kvc 與 kvo 是 objective c 的關鍵概念,個人認為必須理解的東西,下面是例項講解。

乙個物件擁有某些屬性。比如說,乙個 person 物件有乙個 name 和乙個 address 屬性。以 kvc 說法,person 物件分別有乙個 value 對應他的 name 和 address 的 key。 key 只是乙個字串,它對應的值可以是任意型別的物件。從最基礎的層次上看,kvc 有兩個方法:乙個是設定 key 的值,另乙個是獲取 key 的值。如下面的例子: ?12

3456

78910

1112

voidchangename(person *p, nsstring *newname)

現在,如果 person 有另外乙個 key 配偶(spouse),spouse 的 key 值是另乙個 person 物件,用 kvc 可以這樣寫: ?12

3456

78910

1112

13voidlogmarriage(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

60staticnsstring *constkvo_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;

returnself;

}

@end

這就是 kvo 的作用,它通過 key path 觀察物件的值,當值發生變化的時候會收到通知。

優秀工程師 NSUserDefault

nsuserdefaults是什麼,有什麼用處 對於應用來說,每個使用者都有自己的獨特偏好設定,而好的應用會讓使用者根據喜好選擇合適的使用方式,把這些偏好記錄在應用包的plist檔案中,通過nsuserdefaults類來訪問,這是nsuserdefaults的常用姿勢。如果有一些設定你希望使用者即...

優秀工程師的素質

1.責任感 責任感是一種自覺主動履行分內分外一切有益事情的精神狀態。責任感作為心理學概念,屬於社會道德心理的範疇,是思想道德素質的重要內容。也是工程職業道德的基礎。2.人際交往能力 工程上的成功必定是團隊努力的結果。成功的工程師往往具有良好的人際交往能力。他們不僅需要和受教育程度高的工程師同行以及其...

優秀工程師應該具備哪些素質 優秀工程師的必備素質上

什麼是工程師?工程師是為解決問題而生的。應用工程技術科學和其他有關科學知識,解決工程技術中的各類具體問題。現代科技發展迅猛,使現代工程和工業生產出現了自動化 智慧型化 資訊化 動態化等許多新的特點。為了適應這些情況變化,工程師必須不斷提高自己的主觀在內素養,培養全面的技術能力和社會工作能力,建立合理...