2010-06-22 89 views
0

我正在使用cocos2d編寫代碼。 我想釋放我分配的所有內存。我用下面的方法在dealloc方法中完成了它。
我發佈的所有對象都在接口文件中聲明,屬性(分配)已設置並在實現文件中合成。
我用的alloc方法像編程接收信號:「EXC_BAD_ACCESS」

self.PlayerA = [[CCSprite alloc] initWithFile:@" PlayerImage_01.png"]; 


-(void)dealloc 
{ 
int count , i ; 

count = [self.PlayerA retainCount]; 
for(i = 0; i < count; i++) 
    [self.PlayerA release]; 

count = [self.targetLayer retainCount]; 
for(i = 0; i < count; i++) 
    [self.targetLayer release]; 

    count = [self.playerGunSlowDrawSheet retainCount]; 
for(i = 0; i < count; i++) 
    [self.playerGunSlowDrawSheet release]; 

count = [self.playerGunSlowDrawAnimation retainCount]; 
for(i = 0; i < count; i++) 
    [self.playerGunSlowDrawAnimation release]; 

count = [self.numberFinishedTime retainCount]; 
for(i = 0; i < count; i++) 
    [self.numberFinishedTime release]; 

count = [self.backGroundImage retainCount]; 
for(i = 0; i < count; i++) 
    [self.backGroundImage release]; 

[[CCTextureCache sharedTextureCache] removeAllTextures]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames]; 

[super dealloc]; 
} 

創建他們,但我得到:程序接收到的信號:「EXC_BAD_ACCESS」。 我調試它顯示錯誤在[超dealloc];

我在內存管理上完全錯了嗎?或者我錯過了這件事。 謝謝。

回答

1

是的,這不是釋放對象的好方法。通過在你的dealloc方法中多次釋放對象A(如果它的保留計數大於1),你可能會從任何其他可能使用對象的對象下拉出地毯。

如果你擁有它,你應該只釋放一次對象(假設你只保留一次對象或你自己分配對象)。

有關「擁有」對象的詳細信息,我建議你閱讀蘋果的內存管理編程指南:

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

使用建立和您的Xcode的Build菜單分析項目應有助於找到這樣的問題一旦你理解的Objective-C內存管理的基礎知識

通常,dealloc方法應該是這樣的:

-(void) dealloc 
{ 
    [self.objectA release]; 
    [self.objectB release]; 

    [super dealloc]; 
} 

編輯:爲了回答你原來的問題,爲什麼你要得到EXC_BAD_ACCESS,這裏沒有足夠的信息來確定原因。一個可能的原因可能是您正在釋放子類中的一個對象,該對象也會在您的超類的dealloc方法中被釋放。但是,這只是在黑暗中拍攝

+0

但是,我讀了多少次我們分配內存,我們應該多次釋放。所以,我做到了。我會通過你發佈的鏈接。 謝謝。 – 2010-06-22 10:17:04

+0

Srikanth - 是的,對象應該被「釋放」多次,因爲它已被「保留」(或分配)。然而,簡單地釋放一個對象反覆擊敗了引用計數點 - 正如你基本上所說的「我不在乎這被引用了多少次,只是釋放這個對象所使用的內存」。 想象一下你有A,B和Z的情況.A和B都參考Z.你創建Z,然後A,然後B,所以現在Z的refcount是2. 然後說釋放A,得到處理。然後它會釋放Z兩次,Z會得到處理。如果B然後嘗試使用Z,它將會失敗。 – AlexC 2010-06-23 09:40:39

相關問題