2012-08-24 61 views
-2

您好,我混淆瞭如何釋放已經不存儲指針頭文件的指針的aclloc類。在循環之後,我失去了指向類的指針,因爲它具有所有相同的實例名稱。如何釋放多個alloc類?

for(i=0;i<20;i++){ 
    MyClass *class = [[MyClass init]alloc]; 
    class.count = i; 
    [classArray addObject:class]; 
    [self addToScene:class]; 

} 

我理解記憶的alloc的基本概念和保留,但自從我使用cocos2d的編寫思路,我不知道有關錯誤的原因是從Object-C或cocos2d的。所以我想對object-c中的交易記憶做一個清晰的概念。幫我:-)

回答

1

修改腳本:應該交換alloc和init調用(首先分配,然後初始化)。

您必須在循環內部釋放它們 - 將它們添加到數組中才能保留它們。

for(i = 0;i < 20; i++) { 
    MyClass *obj = [[MyClass alloc] init]; 
    obj.count = i; 
    [classArray addObject:obj]; 
    [obj addToScene:obj]; 
    [obj release]; 
} 
+0

不知道的陣列保留對象。哈哈我這樣的小白,謝謝! – user842589

+0

@ user842589它在文檔中。 :)無論如何,這將是不合邏輯的,否則,想一想... – 2012-08-24 00:27:08

0

如果我的理解正確,將對象存儲在NSArray並釋放它們。然後在完成對象釋放數組後。這是解決這個問題的方法之一。

0

陣列保留自己的內容,所以你只需要確保你不保留它,無論是:

// Simpler 
{ 
    MyClass *c = [[[MyClass alloc] init] autorelease]; 
    ⋮ 
} 

或:

// Less memory 
{ 
    MyClass *c = [[MyClass alloc] init]; 
    ⋮ 
    [c release]; 
} 

甚至:

// Rely on ARC (simpler and less memory). 
{ 
    MyClass *c = [[MyClass alloc] init]; 
    ⋮ 
} 

編輯:通過@ H2CO3發現交換的alloc和init調用。

+0

你確定按init和alloc的順序嗎? – 2012-08-24 00:17:07

+0

@ H2CO3:謝謝。我甚至沒有檢查過它們;我只是複製粘貼。 –

+0

沒問題:)我傾向於發現這些錯誤,因爲他們傷害了...... :-) – 2012-08-24 00:19:34

0

看,當添加一個對象陣列,其引用計數增加由,如陣列指的是對象。所以它是一個更好的發佈,經過你分配的對象將其添加到陣列,或將其標記爲自動釋放分配時,讓所有的對象標記爲自動釋放將爲垃圾收集在年底選擇幀。

那麼試試這個,

MyClass *obj = [[[MyClass alloc] init] autorelease]; 

否則這個,

MyClass *obj = [[MyClass alloc] init]; 
.... 
.... 
[classArray addObject: obj]; 
[obj release];