ios - Autoreleased 变量在 iOS 7.1 更新中崩溃,但在 iOS 7.1 之前的操作系统版本中工作正常

标签 ios objective-c ios7.1

我遇到了一个奇怪的问题。我有一段代码如下:

UIView *myView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 380)] autorelease];
// then I add some view componetns to this view...
[self.view addSubView:myView];
[myView release];

根据我的理解,一旦在 myView 变量上调用释放消息,或者在线程上发生自动释放池耗尽,这段代码就会崩溃。

然而,这段代码在iOS 7.1之前的iOS版本中运行良好(我在iOS 6.0、7.0、7.0.4中测试过)。但它在 iOS 7.1 和 7.1.1 更新中崩溃。

谁能告诉我发生内存释放崩溃的确切原因。为什么它在早期版本中没有崩溃。

最佳答案

您错误地释放了 myView。要么让自动释放池在耗尽时释放 myView,要么通过调用 release 手动释放它。现在,您在方法结束时释放它一次,然后它又被 autorelease drain 错误地释放,导致对象被释放。然后系统尝试访问 View 并崩溃。

addSubviews: 增加保留计数,您立即释放它。然后 autorelease 通过 allocation/init 释放 init retain。

至于为什么不崩溃,其实并不重要。可能是系统过度保留了 View ,因此对象仍然存在,而它在 7.1 中不再存在。但这并不重要,问题出在您的代码中。

关于ios - Autoreleased 变量在 iOS 7.1 更新中崩溃,但在 iOS 7.1 之前的操作系统版本中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23948554/

相关文章:

php - 在ios中向php脚本发送参数

iphone - 什么时候在 Mac/iPhone 上使用 CALayer?

ios - iOS 7 与 iOS 7.1 之间的差异

ios - 如何使用 Swift 在基于 UIKit 的游戏中保存/加载游戏状态

ios - 从今日扩展(小部件)在主机应用程序中执行操作,无需打开应用程序 ios

ios - 如何从服务器在设备上播放视频?

iOs 设置原始值

ios - 为什么我不能在我的 XIB 中转到 View Controller ?

ios - UISearchBar barTintColor 没有隐藏在 iOS 7.1 中

iOS 推送 ViewController 不工作