我想在一個對象的多個事件(1對N關係)上有多個觀察者。何時使用NSNotificationCenter
實現此任務的機制由NSNotificationCenter
提供。該機制看起來相當矯枉過正時用於我的問題。
我怎麼會做手工,而無需使用NSNotificationCenter
:
- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
從我的對象添加和刪除觀察員。
- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
for (id delegate in delegates) {
NSObject *data = [eventData copy];
[delegate someEventFired:data];
}
}
這種機制是直接的,簡單的,而無需額外的共享字符串對象來實現。
- 除了
NSNotificationCenter
之外,在iOS框架中是否存在1對N代表(如C#事件)的官方模式? - 什麼時候應該使用
NSNotificationCenter
?何時不使用? - 什麼時候應該使用一個像我在這裏建議的實現,而不是什麼時候使用?
我很少或甚至沒有使用NSNotificationCenter,但是採用了與您描述的相同的方法。我已經在很多iOS應用中使用過它(我會說超過50個應用)很多年了,至今我還沒有看到任何問題。一個可能的問題可能是您需要確保有時會刪除觀察員,或者他們可能不會在預期時被釋放,因爲他們由代表的守護者保留。 – Jonny
我認爲即使NSNotificationCenter不是我們從C#知道的方法,我們仍然應該專注於使用我們工作的特定平臺的設計模式。也就是說,我現在已經在幾個應用程序中使用了NSNotificationCenter(儘管如此),並且我認爲代碼通過它變得更糟。 – Etan