簡體   English   中英

我應該叫釋放一個被搬走的孩子嗎?

[英]Should I call release on a removed child?

MyClass *var = [[MyClass alloc]initWithSomeNumber:15];
[self addChild:var];
[self removeChild:var cleanup:YES];

我是否需要致電var release 還是removeChild方法已經解決了這個問題? 有沒有一種方法可以創建var而不必使用alloc 我聽說節點有一個名為node的類方法。 但是它不接受參數(如您所見,我需要傳遞整數15)。

如果您不使用ARC,是的,您需要釋放它。 當添加子對象時, self將保留子對象,而在刪除子對象時將其釋放,這仍然使alloc / init調用中隱式保留。

是的,這是內存管理策略中定義的規則之一

您擁有自己創建的任何對象

您可以使用allocvar分配空間,這會將var引用計數器設置為1。無論此后有多少其他對象聲明所有權(通過發送retain ),都必須在var上發送release來將引用計數器減1。否則,參考計數器永遠不會達到0,這意味着用於var的內存將永遠不會被釋放,即最終會導致內存泄漏。

MyClass *var = [[MyClass alloc]initWithSomeNumber:15]; // ref count = 1
[self addChild:var]; // ref count ++
[self removeChild:var cleanup:YES]; //ref count--
//ref count is 1

使用ARC,此鏈接將為您提供幫助

暫無
暫無

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

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