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,因为您没有创建或保留它。
你的问题有点难以理解,这是你问的?
嗨,我有一个NSNotificationCenter选择,
没关系,你的意思是你有在NSNotificationCenter的方法的选择。
在Objective-C中,“选择器”有两个 的含义。当 用于一个对象的源代码消息到 时,它可以用于将 简单地引用到方法的名称。但是,它也指 唯一标识符,它在编译源代码为 时替换 的名称。 http://developer.apple.com/mac/library/documentation/cocoa/....../ocSelectors.html
所以你已经创建了一个引用方法的选择器。
把它放在哪里?
这是一个变量,您可以将它存储在您感觉它适合您的设计的地方。
在委托
见上文。
(如果是又在哪里?)
它是一个变量,它取决于您的使用。
在控制器中?
你有控制器吗?取决于你的设计。
该放置该方法的位置。
哪种方法?
我需要dealloc NSNotificationCenter吗?
不,[NSNotificationCenter defaultCenter]
返回对通知中心的引用,您不会释放它。
由于您订阅了UIApplicationDidBecomeActiveNotification
通知,因此放置通知的最合理地点位于应用程序委托的applicationdDidFinishLaunching
方法中。
这是你的代码被调用的第一点,所以你不能更早地设置它。
把它放在哪里?
这取决于您何时需要注册通知。一种方法是在类的'init'方法中添加观察者,并在类的'dealloc'method中移除通知。
好的。所以如果我需要那个我的ViewController会得到这个通知,例如在进入和放弃调用之后,应用程序返回应用程序需要调用此方法,那么我会在哪里放置NSNotificationCenter来调用该方法? – omri 2009-12-15 22:40:11
如果你需要在你的ViewController中,你应该把调用放在'initWithNibName:bundle:'内。 – cobbal 2009-12-15 23:44:31
由于这是一个iPhone应用程序,我认为viewDidLoad:可能是一个更好的地方,然后在viewDidUnload:中取消注册。通常情况下,只有当视图是中断时的活动视图时,才希望视图响应UIApplicationDidBecomeActiveNotification – 2009-12-16 00:51:17