Objective-C - 将 NSNotificationCenter 放在哪里?
Posted
技术标签:
【中文标题】Objective-C - 将 NSNotificationCenter 放在哪里?【英文标题】:Objective-C - where to put the NSNotificationCenter? 【发布时间】:2009-12-15 21:58:24 【问题描述】:我有一个 NSNotificationCenter 选择器,
放在哪里?在控制器中的委托(如果是,那么在哪里?)?
方法也应该放在哪里。
我需要释放 NSNotificationCenter 吗?
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceNotificationReceived:) name:UIApplicationDidBecomeActiveNotification object:nil];
- (void)deviceNotificationReceived:(NSNotification *)notification
[self.soundMgr endInterruption];
【问题讨论】:
【参考方案1】:deviceNotificationReceived:
方法必须是 addObserver:
参数的实例方法。在这个例子中是self
,所以你的方法应该在同一个类中。
您不应该释放 NotificationCenter,因为您没有创建或保留它。
您的问题有点难以理解,这是您要问的吗?
【讨论】:
好的。因此,如果我需要我的 ViewController 将在调用进入和放弃之后收到该通知,并且应用程序返回应用程序需要调用此方法,我将把 NSNotificationCenter 放在哪里来调用该方法? 如果您需要在 ViewController 中调用,可能应该将调用放在initWithNibName:bundle:
中。
由于这是一个 iPhone 应用程序,我认为 viewDidLoad: 可能是一个更好的地方,然后在 viewDidUnload: 中取消注册。通常,您只希望视图响应 UIApplicationDidBecomeActiveNotification 仅当它是中断时的活动视图时
@bodnarbm 如果它是根视图控制器可能会更好;如果视图延迟加载,可能会导致一些问题。【参考方案2】:
嗨,我有一个 NSNotificationCenter 选择器,
好的,你的意思是你在 NSNotificationCenter 中有一个方法的选择器。
在 Objective-C 中,“选择器”有两个 意义。可以用来参考 只是一个方法的名字当 它在源代码消息中用于 一个东西。不过,它也指 替换的唯一标识符 源代码时的名称 编译。 http://developer.apple.com/mac/library/documentation/cocoa/....../ocSelectors.html
所以你已经创建了一个引用方法的选择器。
放在哪里?
这是一个变量,您可以将其存储在您认为适合您的设计的任何位置。
在委托中
见上文。
(如果是,那么在哪里?)
它是一个变量,这取决于你的使用情况。
在控制器中?
你有控制器吗?取决于您的设计。
方法也应该放在哪里。
哪种方法?
我需要释放 NSNotificationCenter 吗?
不,[NSNotificationCenter defaultCenter]
返回一个对通知中心的引用,你不要释放它。
【讨论】:
【参考方案3】:由于您订阅了UIApplicationDidBecomeActiveNotification
通知,因此放置通知最合乎逻辑的位置是在您的应用委托的applicationdDidFinishLaunching
方法中。
这是你的代码被调用的第一个点,所以你不能提前设置它。
【讨论】:
【参考方案4】:放在哪里?
这取决于您何时需要注册通知。一种方法是在类的“init”方法中添加观察者,并在类的“dealloc”方法中删除通知。
【讨论】:
以上是关于Objective-C - 将 NSNotificationCenter 放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
将 Swift 导入 Objective-C:未创建 Objective-C 标头“-Swift.h”
将 Swift 导入 Objective-C:未创建 Objective-C 标头“-Swift.h”