ios - 为什么 iOS 向释放的对象发送内存警告,导致我的应用程序崩溃?

标签 ios ios8 unrecognized-selector didreceivememorywarning

我正在搜索我的应用程序的崩溃日志,我看到了这个(它安静地发生了几次,而不是一两次):

enter image description here

如上所示,通知中心发布了一个内存警告通知,并且以某种方式转发给了一个CALayer。我还看到 didReceiveMemoryWarning: 消息的实例发送到其他已释放的对象,例如 UIImageView 甚至私有(private) _UINavigationBarBackground 对象,当启用僵尸时在我的调试器上,我的应用程序也崩溃了。为什么会这样?

最佳答案

NSNotificationCenter 只保留对观察者的引用。

可能发生的情况是您在某处有一个或多个对象注册了 UIApplicationDidReceiveMemoryWarningNotification,但从未取消注册(这是一个错误)。由于 NSNotificationCenter 只保留对这些对象的弱引用,因此当它们被释放时它不会注意到,并且它们的内存被其他对象重用,例如 CALayer 等,这些对象没有实现名为 didReceiveMemoryWarning 的方法。

关于ios - 为什么 iOS 向释放的对象发送内存警告,导致我的应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514884/

相关文章:

iOS - 需要为不同的 iPhone 调整按钮和图像的大小

swift - SpriteKit 和 SceneKit – 如何完全暂停游戏?

ios - 在 Swift 中从 Wifi 切换到 Cellular 时出现可达性错误

ios - UILongPressGestureRecognizer 使用选择器传递参数

ios - ImageView |无法识别的选择器发送到实例 | Xcode 6.4 | iOS 8.4

ios - 在 Swift 中创建可重用 View 并添加完成处理程序

objective-c - 在 iOS 中解压缩下载的文件

ios - UIScrollView 中的多个 UITableView(如 Etsy 应用程序)

xcode - Swift 中的默认值参数是什么?

ios7 - 更改 YTPlayerView 的播放质量