我目前在Objective-C app中使用此方法:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleEnteredForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
如果我不用
将其删除[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil];
我是否有内存泄漏的风险?或者是否有一种很好的方法来利用此通知而不存在内存泄漏的风险?
答案 0 :(得分:1)
没有内存泄漏的危险;通知中心对您的观察员/parent/123/addchild
的引用很弱。
但 存在危险 - 即self
将不复存在,通知中心稍后会尝试向其发送通知。这将导致可怕的崩溃,很难追踪(悬挂指针)。
这就是为什么你必须确定在iOS 8及之前取消注册观察者的原因。
然而,从iOS 9开始,这不再是一个问题,因为通知中心对您的观察者的引用不是简单弱,而是ARC弱。这意味着对已发布的观察者的引用变为self
。通知中心会检测到此情况并安全地停止向其发送通知。