自动释放变量在iOS 7.1更新中崩溃,但在iOS 7.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中测试过)。但是它在ios7.1和7.1.1更新时会崩溃。

有人能告诉我内存释放崩溃的确切原因吗?

您释放myView不正确。要么让自动释放池在排完后释放myView,要么通过调用release手动释放它。现在,您在方法结束时释放它一次,然后它被自动释放drain错误地再次释放,导致对象被释放。然后,系统试图访问视图并崩溃。

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

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

在为对象分配内存时已经使用了自动释放,并且在添加视图后再次释放。你可以移除autorelease或者移除[myView release]

相关内容

最新更新