【问题标题】:Objective C Autorelease in a loop with NSNumberFormatter使用 NSNumberFormatter 循环中的 Objective C 自动释放
【发布时间】:2012-04-09 16:35:42
【问题描述】:

我正在尝试格式化数字数组以在循环中显示在 CCLabelTTF 数组中。 NSNumberFormatter 返回一个自动释放对象。我不太确定我应该如何处理这里的内存管理。任何建议将不胜感激。

这是我要解决的问题:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSString *tempString;

for(int i = 0; i<10; i++){
    tempString = [formatter stringFromNumber:[NSNumber numberWithInteger:NumberArray[i]]];
    CCLabelTTFArray[i] = [[CCLabelTTF alloc] initWithString: tempString fontName:@"Arial" fontSize:10.0f];
    [tempString release];
}

[formatter release];

【问题讨论】:

  • 您无需致电[tempString release];,仅此而已。运行循环将在您的方法完成后的一段时间内为您“自动释放”对象。
  • 我认为可能有问题,因为我更改了 tempString 指针,因此我丢失了指向该对象的指针。我认为它可能会导致内存泄漏,因为函数结束时它会自动释放 tempString,但不是所有以前的 tempString 分配。我不是故意放[tempString release]的,我错了。
  • 我编辑了我的答案以回应您的最后评论。
  • 为什么使用 C 数组而不是 NSArray?

标签: objective-c loops autorelease nsnumberformatter


【解决方案1】:

您不需要调用[tempString release];:运行循环会在您的方法完成之后的某个时间为您“自动释放”对象。。对于短时间运行的循环(比如你的,只有十次迭代),没有什么可担心的。对于具有数千次迭代的循环,您可以考虑添加Autorelease Pool

我认为这可能会导致内存泄漏,因为函数结束时它会自动释放 tempString,但不会自动释放 tempString 的所有先前分配

stringFromNumber: 方法的每次调用都会将其返回值添加到自动释放池中,因此无论循环执行多少次,所有返回的字符串都会被自动释放。

【讨论】:

  • 谢谢您的直截了当的回复。到目前为止,我所阅读的所有内容都不清楚如何跟踪自动释放对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多