使用 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 生成小数点后尾随零的数字