KVO的實現原理

KVO是通過isa-swizzing的方法來實現的。就是比如B作爲觀察者觀察A的屬性name時,在運行時會動態生成一個A的子類notify_A類,然後將A類的實例對象的isa指針指向notify_A這個子類,然後在子類中重寫的方法有三個:

  1. name的set方法
- (void) setName:(NSString*) name
{
	willChangeValueForKey;
	_name = name;
	didChangeValueForKey;
}

didChangeValueForKey 方法內部已經調用了observer的observeValueForKeyPath:ofObject:change:context:方法。

  1. 重寫了class方法,返回的是原來的A類對象,這樣的話內部再調用A類實例變量的其他方法時則不會發生問題。
class 
{
	return class_getSuperclass(object_getClass(self));
}
  1. 重寫了delloc方法,在合適的時候銷燬這個運行時創建的類。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章