我有一個Poster
類,它通過NSNotificationCenter
發佈通知。我有兩個不同的觀察員:ObserverSuperclass
和ObserverSubclass
。 ObserverSuperclass
是ObserverSubclass
的超類。我希望每個班級對通知做出不同的迴應。基於塊的NSNotificationCenter觀察子類?
根據NSHipster,我應該使用現代的基於塊的api:addObserverForName:object:queue:usingBlock:
。
在ObserverSubclass
的初始化方法中,我需要刪除超類作爲觀察者。因爲我使用的是基於塊的API,所以我需要引用返回值addObserverForName:object:queue:usingBlock:
- 一個「作爲觀察者的不透明對象」。所以我寫了下面的代碼:
在ObserverSuperclass.h
@property (nonatomic, strong) id observer;
在ObserverSuperclass.m
self.observer = [NSNotificationCenter defaultCenter] addObserverForName:@"Help!" object:nil queue:nil usingBlock:^{old block}];
在ObserverSubclass.m
[[NSNotificationCenter defaultCenter] removeObserver:self.observer name:@"Help!" object:nil];
self.observer = [NSNotificationCenter defaultCenter] addObserverForName:@"Help!" object:nil queue:nil usingBlock:^{new block}];
這實際上是這樣做的最好方法嗎?我不確定在這裏使用基於塊的API是否有意義。
您可以實現一個返回處理程序塊的方法。然後,您可以簡單地在子類中重寫此方法,或者僅使用基於選擇器的API – Paulw11 2014-10-21 23:02:47
爲什麼需要以觀察者的身份移除超類?你不想讓這個塊執行嗎? – Roberto 2014-10-21 23:12:33