2009-12-15 17 views
0

我有一個NSNotificationCenter選擇器,Objective-C - 放置NSNotificationCenter的位置?

把它放在哪裏?在控制器中的代表(如果是,那麼在哪裏?)?

該放置方法的位置。

我需要釋放NSNotificationCenter嗎?

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceNotificationReceived:) name:UIApplicationDidBecomeActiveNotification object:nil]; 



- (void)deviceNotificationReceived:(NSNotification *)notification 
{ 
    [self.soundMgr endInterruption]; 
} 

回答

3

deviceNotificationReceived:方法必須是addObserver:參數的實例方法。在這個例子中是self,所以你的方法應該在同一個類中。

您不應該發佈NotificationCenter,因爲您沒有創建或保留它。

你的問題有點難以理解,這是你問的?

+0

好的。所以如果我需要那個我的ViewController會得到這個通知,例如在進入和放棄調用之後,應用程序返回應用程序需要調用此方法,那麼我會在哪裏放置NSNotificationCenter來調用該方法? – omri 2009-12-15 22:40:11

+0

如果你需要在你的ViewController中,你應該把調用放在'initWithNibName:bundle:'內。 – cobbal 2009-12-15 23:44:31

+0

由於這是一個iPhone應用程序,我認爲viewDidLoad:可能是一個更好的地方,然後在viewDidUnload:中取消註冊。通常情況下,只有當視圖是中斷時的活動視圖時,才希望視圖響應UIApplicationDidBecomeActiveNotification – 2009-12-16 00:51:17

2

嗨,我有一個NSNotificationCenter選擇,

沒關係,你的意思是你有在NSNotificationCenter的方法的選擇。

在Objective-C中,「選擇器」有兩個 的含義。當 用於一個對象的源代碼消息到 時,它可以用於將 簡單地引用到方法的名稱。但是,它也指 唯一標識符,它在編譯源代碼爲 時替換 的名稱。 http://developer.apple.com/mac/library/documentation/cocoa/....../ocSelectors.html

所以你已經創建了一個引用方法的選擇器。

把它放在哪裏?

這是一個變量,您可以將它存儲在您感覺它適合您的設計的地方。

在委託

見上文。

(如果是又在哪裏?)

它是一個變量,它取決於您的使用。

在控制器中?

你有控制器嗎?取決於你的設計。

該放置該方法的位置。

哪種方法?

我需要dealloc NSNotificationCenter嗎?

不,[NSNotificationCenter defaultCenter]返回對通知中心的引用,您不會釋放它。

1

由於您訂閱了UIApplicationDidBecomeActiveNotification通知,因此放置通知的最合理地點位於應用程序委託的applicationdDidFinishLaunching方法中。

這是你的代碼被調用的第一點,所以你不能更早地設置它。

0

把它放在哪裏?

這取決於您何時需要註冊通知。一種方法是在類的'init'方法中添加觀察者,並在類的'dealloc'method中移除通知。