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”

Objective-c:将目录复制到另一个

将 PinchRecognizer Objective-C 代码转换为 Swift

将 Objective-C 协议委托作为参数传递

将 Swift 导入 Objective-C - “使用未声明的标识符”