2012-05-23 46 views
1
MyClass *var = [[MyClass alloc]initWithSomeNumber:15]; 
[self addChild:var]; 
[self removeChild:var cleanup:YES]; 

我必須致電release諮詢var嗎?還是removeChild方法已經照顧這樣的?有沒有辦法創建var而不必使用alloc?我聽說有一種稱爲node的節點的類方法。但它不接受參數(正如你所看到的,我需要傳遞整數15)。我應該給已經移走的孩子打電話嗎?

+0

是的,因爲你使用alloc,所以你可以將ref計數器增加1,因此你擁有這個對象。 –

回答

2

是的,它是在Memory management policy

你擁有的任何對象定義創建

您使用allocvar分配空間的規則之一,將設置var引用計數器爲1.無論有多少其他物體在此之後聲明所有權(通過發送retain),您必須發送release,var以將參考計數器減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 
1

使用ARC如果你不使用ARC這個link將幫助您

3

,是的,你需要釋放它。 self將在你添加它時保留子項,並在你刪除它時釋放它,這仍然會從你的alloc/init調用中留下隱含的保留。

相關問題