簡體   English   中英

自動發布的變量在iOS 7.1更新中崩潰,但在iOS 7.1之前的OS版本中工作正常

[英]Autoreleased variable crashes in iOS 7.1 update, but working fine in OS versions prior to 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中進行了測試)。 但它在iOS 7.1和7.1.1更新中崩潰。

有人可以告訴我發生內存釋放崩潰的確切原因。 任何在早期版本中為什么不崩潰的原因。

您不正確地釋放了myView 讓自動釋放池在耗盡myView時釋放它,或者通過調用release手動釋放它。 現在,您在方法末尾釋放它一次,然后由於自動釋放漏失再次將其釋放不正確,導致對象被釋放。 然后,系統嘗試訪問該視圖並崩潰。

addSubviews:增加保留計數,然后立即釋放它。 然后自動釋放通過分配/初始化釋放初始化保留。

至於為什么它不會崩潰,這並不是很重要。 可能是系統過度保留了視圖,因此對象仍然處於活動狀態,而在7.1中不再保留。 但這並不重要,問題出在您的代碼中。

在為對象分配內存時,您已經使用了自動釋放功能,並且在添加視圖之后再次釋放了該功能。 您可以刪除自動發布或刪除[myView版本]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM