2012-10-24 17 views
1

我想知道如果我做了以下情況,是否考慮泄漏? 如何修改代碼以使其看起來更清潔/更好?有關CCSprite初始化的內存問題

// ClassA 
@interface ClassA 
    CCSprite* image; 

@property (nonatomic, retain) CCSprite* image; 
@end 

@implementation ClassA 
@synthesize image; 
- (id)init 
{ 
    image = [[CCSprite alloc] init]; 
} 

- (void)dealloc 
{ 
    [image release]; 
    [super dealloc]; 
} 

@interface Main 
@end 

@implementation Main 
- (id)init 
{ 
    ClassA* aObject = [[ClassA alloc] init]; 
    aObject.image = [CCSprite spriteWithFile: @"something.png"]; 
} 
@end 
+0

無論你做什麼,都不要調用[image dealloc],而是你可能想要發佈它。 – YvesLeBorg

+0

對不起,這是一個錯字。我編輯了它 –

+1

使用ARC,使用ARC,使用ARC。谷歌教程啓用ARC並停止想知道,寫你的應用程序! – LearnCocos2D

回答

0

我使用同樣的東西,就像這樣..看到在我們的代碼,兩次內存分配給圖像。

@interface ClassA : CCSprite 
{ 

} 

@end 

@implementation ClassA 
- (id)init 
{ 

} 

- (void)dealloc 
{ 
    printf("Released..\n"); 
    [super dealloc]; 
} 

@interface Main 
@end 

@implementation Main 
- (id)init 
{ 
    ClassA* aObject = [ClassA spriteWithFile: @"something.png"]; 
    [self addChild:actor z:3 ]; 

} 

- (void)dealloc 
{ 
    [self removeAllChildrenWithCleanup:YES]; 

    [super dealloc]; 
} 
@end 
+0

是的,我知道我分配了兩次,但我想要做的是該圖像可能不會被分配一個spriteFile,依賴於類...這就是爲什麼在classA本地,我想初始化spriteFile,以便以後它可以被其他班級使用。我應該怎麼做? 我可以做一些像[image setImage:@「something.png」]; ? –

+0

第一次使用spriteWithFile,當你想改變,然後使用setDisplayFrame:或setTexture :. – Guru

+0

嗯,好的,謝謝 –