我的一部分認爲我理解NSNotification概念。這是一個基於字符串通知的集中式廣播系統。一邊張貼,觀察一邊或多邊,並據此採取行動。我的另一部分雖然需要編寫代碼,但每次需要通知時都會感到困惑。什麼樣的代碼進入哪個頭文件/實現,哪些文件實際上在觀察,以及如何避免它變成一團糟?把時間弄清楚,你能幫我驗證這些假設嗎?我對第四名相當有信心,但是第五名碰到了混亂困境。NSNotification概念 - 哪一段代碼在哪裏?
- NSNotifications與從[NSNotification defaultCenter]幫助下創建,一個不ALLOC /初始化一個NSNotification。正確?
- 執行postNofification專長的對象始終將
self
傳遞到發佈代碼:[[NSNotificationCenter defaultCenter] postNotificationName:@"note name" object:self]
。正確? - 事件冒泡存在於其他語言中,但不存在於具有NSNotification的Objective-C中。您不通過通知,您可以爲全球廣播制定足夠的通知名稱。正確?
- 如果您仍然希望傳遞由對象A發佈的通知,請在B中觀察它,處理它併發佈一個新的,更具體的通知以供對象C觀察。例如。從A到B有
@"MenuItemTapped"
,從B到C有@"NavigateTo"
。對不對? - 通知的名稱是NSString。因爲海報和觀察者都希望避免輸入錯誤,所以我們將NSString常量存儲在[extern const | define | class method | above]中。你能幫我挑一個嗎?
- 一次嘗試是創建類似於
NotificationNames.h
文件的文件,該文件將包含所有extern NSString *const NOTE_NAME
聲明。然而,這破壞了通知的可移植性。 - 另一個嘗試是NSNotification的子類化(使用XCode模板來快速創建),但是因爲這個概念是從AS3中的事件類繼承而來的,所以它看起來非常不客觀。還有一種奇怪的是,你不能在NSNotification上調用[super init],所以事情開始失控。
- 我的煩惱與這一個來自繁瑣的
#import
陳述。如何最小化錯字,但保持常量/定義是否可移植?
- 一次嘗試是創建類似於
另外,最好是在dealloc中刪除所有觀察者,並將其添加到NSNotificationCenter中。 – 2011-01-22 16:30:29