【发布时间】:2011-07-27 19:41:44
【问题描述】:
我正在使用 cocos2d 填充一个 NSMutable 数组,然后从该数组创建一个 NSArray。我使用不同的数组名称连续执行以下代码 3 次,第三次 Instruments 报告我添加到数组中的每个元素的泄漏。
奇怪的是,它不是在每次创建和添加 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:数组保留了添加的对象。释放使用 alloc 创建的对象是正确的,以便在重用指针时不泄漏。
-
这可能与
[NSArray arrayWithArray:tempNumberArray]创建数组的autoreleased copy 的事实有关吗? (再想一想,可能不会,因为numbersArray属性设置器会保留它,对吧?) -
是的,self.numbersArray 设置器会保留它,正确的。
标签: objective-c cocos2d-iphone