gpt4 book ai didi

objective-c - 我在 Objective C 中创建和填充 NSArray 的方式有什么问题?

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:24 25 4
gpt4 key购买 nike

我正在使用 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] 保留 Sprite 对象。

最佳答案

我不确定您为什么会看到泄漏。您发布的代码是正确的,尽管不必每次都将 tempSprite 设置为 nil;如果您有机会在释放对象后尝试使用指针向对象发送消息,那么您真的只需要这样做。但是,它不会造成任何伤害。

我能建议的唯一改进是在循环中构建数组:

// You can also use an autoreleased mutable array, since you don't need it
// to stick around after construction.
NSMutableArray * tempNumbersArray = [NSMutableArray array];
int i;
for( i = 0; i < NUM_OF_SPRITES; i++ ){
CCSprite * tempSprite = [[CCSprite alloc] initWithSpriteFrameName:@"0.png"];
[tempNumbersArray addObject:tempSprite];
[tempSprite release];
}

self.numbersArray = [NSArray arrayWithArray:tempNumbersArray];

关于objective-c - 我在 Objective C 中创建和填充 NSArray 的方式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com