iOS UIApplicationWillEnterForegroundNotification没有内存泄漏?

时间:2018-01-30 16:30:23

标签: ios objective-c memory-leaks

我目前在Objective-C app中使用此方法:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleEnteredForeground) name:UIApplicationWillEnterForegroundNotification object:nil];

如果我不用

将其删除
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil]; 

我是否有内存泄漏的风险?或者是否有一种很好的方法来利用此通知而不存在内存泄漏的风险?

1 个答案:

答案 0 :(得分:1)

没有内存泄漏的危险;通知中心对您的观察员/parent/123/addchild的引用很弱。

存在危险 - 即self将不复存在,通知中心稍后会尝试向其发送通知。这将导致可怕的崩溃,很难追踪(悬挂指针)。

这就是为什么你必须确定在iOS 8及之前取消注册观察者的原因。

然而,从iOS 9开始,这不再是一个问题,因为通知中心对您的观察者的引用不是简单弱,而是ARC弱。这意味着对已发布的观察者的引用变为self。通知中心会检测到此情况并安全地停止向其发送通知。