iPhone,便捷方法还是Alloc / Release?

时间:2010-04-09 20:59:22

标签: iphone objective-c memory-leaks

虽然为iPhone开发我有一个顽固的内存泄漏,我最终追踪到NSXMLParser。然而,在寻找它时,它让我想到可能会改变我的许多方便方法来分配/释放。这样做有什么好的理由吗?在一个大型应用程序中,我可以看到如何快速释放内存是一个更好的主意,但在一个小应用程序中,这两种方法之间还有其他区别。

NSNumber *numberToAdd = [NSNumber numberWithInt:intValue];
dostuff ...

OR

NSNumber *numberToAdd = [[NSNumber alloc] initWithInt:intValue];
doStuff ...
[numberToAdd release];
欢呼加油。

2 个答案:

答案 0 :(得分:4)

这两种方法之间在内存管理方面没有区别。在gui应用程序中,NSAutoreleasePool在运行循环的每次旋转中被创建和销毁,因此像这样的小对象很可能在几微秒内被销毁。我唯一能看到它重要的是,如果你在一个辅助线程,而你即将创建一个自动释放对象的 TON 。但是,您总是欢迎创建和销毁自己的自动释放池。

答案 1 :(得分:0)

[NSNumber numberWithInt:1] === [[[NSNumber alloc] initWithInt:1] autorelease]

即使numberWithInt:更方便,也需要执行更多代码。在内部,autorelease将该对象粘贴到不断增长的阵列上。

如果你在循环中进行大量分配,你可能会从自己管理内存中受益。在UI操作的正常过程中,自动释放的成本可以忽略不计。

批次的实际定义取决于您和分析器。更可读代码的好处在什么时候会损失更快的代码?