ios - 如何声明弱通知

标签 ios swift memory-management nsnotificationcenter deinit

也许标题没有提供很好的描述,所以请阅读以下内容。

我有一个设置为监听事件的通知:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.checkIfNotificationsWereTurnedOnAfterAlertShowing), name: UIApplicationWillEnterForegroundNotification, object: UIApplication.sharedApplication())

然后我想删除此通知上的观察者。 我发现我需要像这样使用 deinit:

deinit  { 
    NSNotificationCenter.defaultCenter().removeObserver(UIApplicationWillEnterForegroundNotification)
    print("deinit")
}

但问题是,当我关闭 View Controller 时,程序永远不会执行 deinit 函数。 在此answer我发现这可能是由于强引用造成的。

我检查了很多链接,但无法找到如何声明通知的弱引用。 那么如何声明弱通知呢?

希望我的问题很清楚。

期待您的帮助。

最佳答案

我无法找到使用 deinit 处理此问题的方法,因此我决定删除 viewWillDisappear 中的观察者,这对我来说效果很好。建议者Rob Napier在上面的评论中

关于ios - 如何声明弱通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38830468/

相关文章:

ios - 代码 : missing required module error

gcc中的C内存管理

c - 增加堆栈大小 : typical issues?

ios - 快速触摸开始并将其显示在触摸的对象上

ios - 如何使用委托(delegate)将数据从页脚单元格传递到 View Controller ?

ios - 在主 Controller 部分加载 uiviewcontroller

php - Alamofire 不发布到 PHP 脚本

C++:不删除对象/总是/内存泄漏吗?

IOS - 静态 UITableViewCell - 返回当前高度

iOS 13 - 我们可以使用 xib 作为启动 Storyboard的启动屏幕吗?