Objective-C - 放置NSNotificationCenter的位置?

问题描述:

我有一个NSNotificationCenter选择器,Objective-C - 放置NSNotificationCenter的位置?

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

该放置方法的位置。

我需要释放NSNotificationCenter吗?

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



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

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

嗨,我有一个NSNotificationCenter选择,

没关系,你的意思是你有在NSNotificationCenter的方法的选择。

在Objective-C中,“选择器”有两个 的含义。当 用于一个对象的源代码消息到 时,它可以用于将 简单地引用到方法的名称。但是,它也指 唯一标识符,它在编译源代码为 时替换 的名称。 http://developer.apple.com/mac/library/documentation/cocoa/....../ocSelectors.html

所以你已经创建了一个引用方法的选择器。

把它放在哪里?

这是一个变量,您可以将它存储在您感觉它适合您的设计的地方。

在委托

见上文。

(如果是又在哪里?)

它是一个变量,它取决于您的使用。

在控制器中?

你有控制器吗?取决于你的设计。

该放置该方法的位置。

哪种方法?

我需要dealloc NSNotificationCenter吗?

不,[NSNotificationCenter defaultCenter]返回对通知中心的引用,您不会释放它。

由于您订阅了UIApplicationDidBecomeActiveNotification通知,因此放置通知的最合理地点位于应用程序委托的applicationdDidFinishLaunching方法中。

这是你的代码被调用的第一点,所以你不能更早地设置它。

把它放在哪里?

这取决于您何时需要注册通知。一种方法是在类的'init'方法中添加观察者,并在类的'dealloc'method中移除通知。