iphone - 添加观察者/删除观察者查询

标签 iphone cocoa-touch nsnotification

可以使用-removeObserver:吗?先调用-addObserver:同名?或者是有-addObserver:的规则首先之前-removeObserver:

我使用 OS 4.0 进行了尝试,看起来不错(没有崩溃、警告...等)。

-(void) setObserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:OBSERVER_NAME object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector: @selector(selectorName)
                                             name:OBSERVER_NAME 
                                           object:nil]; 
}

原因是为了防止两个观察者具有相同的selectorName假设 -setObserver 被调用两次方法如果该方法位于-viewDidLoad内部,则再次调用该方法并发出内存警告。

另外,我需要调用 -removeObserver:期间-dealloc

最佳答案

如果您的 -selectorName 被调用两次,则您的代码可能存在其他问题。即使 Cocoa 会优雅地删除您尚未添加的观察者,我实际上也不会这样做。

正如用户 tonklon 在评论中所说,您可能应该删除 -viewDidUnload 中的观察者。至于你的最后一个问题,在 -dealloc 中删除观察者也是合理的,尽管构建代码是一种很好的做法,这样删除观察者之类的事情会在确定的时间发生,而不是作为副作用内存管理。

关于iphone - 添加观察者/删除观察者查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3191368/

相关文章:

iphone - NSDictionary allKeys - 它总是返回相同的顺序吗?

iphone - 远程重新加载 View

iphone - iOS - 将变量传递给 View Controller

iphone - UISearchDisplayController - 等待 N 秒或用户在进行搜索之前按 "Search"

cocoa-touch - 具有XCode 4.2链接器错误的Facebook iOS SDK 3.1

ios - 如果我从另一个已经显示键盘的 View Controller 转换过来,如何检测当前是否显示键盘?

ios - NSNotification帖子在主线程崩溃

ios - 使用 CloudKit 在 iOS 11 中将通知标记为已读

objective-c - 如何判断 NSString 是否为空

iphone - 无法在核心数据中存储 NSNumber