我正在使用cocos2d填充一個NSMutable數組,然後從該數組創建一個NSArray。我使用不同的數組名稱連續3次執行以下代碼,並且第三次使用Instruments將報告每個添加到數組的元素的泄漏。如何在Objective C中創建和填充NSArray有什麼問題?
奇怪的是,它不是每次創建和添加CCSprite時,它每次運行應用程序時所抱怨的行都不一樣。我究竟做錯了什麼?有沒有更好的方法來做到這一點?
這裏是我的代碼:
NSMutableArray *tempNumberArray = [[NSMutableArray alloc] init];
tempSprite = [[CCSprite alloc] initWithSpriteFrameName:@"0.png"];
[tempNumberArray addObject:tempSprite];
[tempSprite release];
tempSprite = nil;
tempSprite = [[CCSprite alloc] initWithSpriteFrameName:@"0.png"];
[tempNumberArray addObject:tempSprite];
[tempSprite release];
tempSprite = nil;
tempSprite = [[CCSprite alloc] initWithSpriteFrameName:@"0.png"];
[tempNumberArray addObject:tempSprite];
[tempSprite release];
tempSprite = nil;
tempSprite = [[CCSprite alloc] initWithSpriteFrameName:@"0.png"];
[tempNumberArray addObject:tempSprite];
[tempSprite release];
tempSprite = nil;
self.numbersArray = [NSArray arrayWithArray:tempNumberArray];
[tempNumberArray release];
tempNumberArray = nil;
編輯:感謝您抽空看看這個。 我第一次使用tempSprite我初始化它像:
CCSprite * tempSprite = [[CCSprite alloc] initWithSpriteFrameName:@"0.png"];
[tempNumberArray addObject:tempSprite];
[tempSprite release];
tempSprite = nil;
我釋放每個分配之間tempSprite,因爲這將是一個泄漏,否則。 [tempNumberArray addObject:tempSprite]保留了精靈對象。
什麼的'tempSprite'初始化代碼? –
你爲什麼要釋放你的tempSprites?如果你已經發布了它們,它們不會進入你的陣列。 – Luke
@Luke:數組保留添加的對象。釋放用alloc創建的對象是正確的,以便在指針被重用時不泄漏。 –