使用 NSNumberFormatter 循环中的 Objective C 自动释放

Posted

技术标签:

【中文标题】使用 NSNumberFormatter 循环中的 Objective C 自动释放【英文标题】:Objective C Autorelease in a loop with NSNumberFormatter 【发布时间】: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? 【参考方案1】:

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

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

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

【讨论】:

谢谢您的直截了当的回复。到目前为止,我所阅读的所有内容都不清楚如何跟踪自动释放对象。

以上是关于使用 NSNumberFormatter 循环中的 Objective C 自动释放的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 NSNumberFormatter 对象为输入 1.0 打印“2”?

NSNumberFormatter 货币符号

使用 NSNumberFormatter 生成小数点后尾随零的数字

NSNumberformatter 添加额外的零

NSNumberFormatter - 获取货币代码的货币符号

numberFromString 的 NSNumberFormatter 问题