KVO和KVC的對比理解

2021-06-29 07:59:51 字數 3531 閱讀 8511

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

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

1

2

3

4

5

6

7

8

9

10

11

12

voidchangename(person *p, nsstring *newname)

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

12

3

4

5

6

7

8

9

10

11

12

13

voidlogmarriage(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 變化,以下是實現的三個方法: ?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

staticnsstring *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 觀察物件的值,當值發生變化的時候會收到通知。

**:

kvc和kvo的區別

on 2012 年 6 月 7 日,in iphone,by donly kvc 與 kvo 是 objective c 的關鍵概念,個人認為必須理解的東西,下面是例項講解。乙個物件擁有某些屬性。比如說,乙個 person 物件有乙個 name 和乙個 address 屬性。以 kvc 說法,per...

KVC和KVO底層原理

kvc和kvo想必都熟知的乙個名詞,觀察者模式,而kvo是基於kvc的,那麼kvc到底是個什麼,kvo又是什麼,那麼它們之間是怎麼關聯的。當你了解kvc機制,會恍然大悟,只要知道乙個ui的結構,就能對他做任意的修改。而kvo是觀察者模式的一種實現,對物件屬性監聽能達到乙個高效能處理,所以了解kvc和...

OC中的KVC和KVO(一)

設計模式 觀察者模式 設計模式是用來解決某一特定問題 1.什麼是觀察者模式?在工程中,一些類去觀察 a 類,當 a 類發生改變時,這些類就收到訊息,做出相應反應。2.什麼時候使用觀察者模式 當乙個類需要傳送訊息給多個類時,就使用觀察者模式 3.觀察者模式的作用 一對多的訊息傳送 4.oc中觀察者模式...