[英]Effect of 'myObj = [[[[MyClass alloc] init] autorelease] retain];'?
[英]What happens when the following code executes? Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];
以下代碼執行時會發生什么?
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];
讓我們分解一下:
[Ball alloc]
:這會創建一個我們擁有的Ball對象(因此需要釋放)。
[[Ball alloc] init]
:初始化我們剛剛創建的Ball對象。
[[[Ball alloc] init] autorelease]
:這會將Ball添加到當前的自動釋放池中,因此當該池耗盡時它將被釋放。 例如,如果我們要從方法返回Ball,這是正確的做法。
[[[[Ball alloc] init] autorelease] autorelease]
:再次自動釋放Ball對象。 這是100%的錯誤。 alloc
是我們需要平衡的唯一所有權聲明,因此Ball現在將被釋放太多次。 這可以通過多種方式表現出來,但它可能會崩潰。
簡短的回答:隨之而來的是崩潰。
一旦你給出了對象autorelease
調用,現在你已經將它的釋放責任交給autorelease pool
,現在它就像你沒有擁有它一樣。它會顯示它可能崩潰或有時不會出現的隨機行為。(取決於何時自動釋放池釋放它,如果它的發布然后它會崩潰)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.