你問我有兩者之間的差別,答案是肯定的,它們之間的差異:
第一個
說:「我作爲一個視圖」,我想補充一個名爲self(又名)viewControllerObject的觀察者,如果你在我的名爲「frame」的屬性改變的時候在viewController.m中調用了它。
第二個
說「我的視圖控制器」我加入myselfAsAnObserver每當theKeyPath名爲「view.frame」被改變。
由於每個觀察者應該執行
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
對於這種情況,因爲你添加一個的viewController在以上任一方法的觀察者,你不會注意到太大的區別,但它會使當你是一個差處理不同的對象。但是規則很簡單,每增加一個觀察者應該實現
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
一件事: 它是一個好主意,以創建一個上下文觀察 如
//In MyViewController.m
//..
static int observingViewFrameContext
// In ...
[self addObserver:self
forKeyPath:@"view.frame"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context:&observingViewFrameContext];
// .. don' forget to remove an observer ! too
是啊,真實,無所不能的權力KVO揭曉! – 2014-03-18 03:10:04