分配和释放 VS。自动释放。为啥和何时?

Posted

技术标签:

【中文标题】分配和释放 VS。自动释放。为啥和何时?【英文标题】:allocating and releasing VS. autoRelease. why and when?分配和释放 VS。自动释放。为什么和何时? 【发布时间】:2011-03-23 06:55:58 【问题描述】:

我看到很多人都在分配和释放 NSStrings。

我知道这样做的好处是字符串会立即释放,而不是通过 autoRelease。

我的问题:

    它有效吗?我应该总是更喜欢在 autoRelease 上分配和释放吗? 更广泛的方法 - 立即分配和释放,然后再次分配在 dealloc 中分配、使用和释放。

将不胜感激。

谢谢

沙尼

【问题讨论】:

【参考方案1】:
    在大多数情况下,这无关紧要。我认为你应该使用自动释放,因为它使代码更简单,@"string" 快捷方式非常优雅。 基本区别在于发布发生的时间点。就像我说的,在大多数情况下,它没有任何区别。如果您想更紧密地控制发布时间,那么您也可以通过滚动自己的 NSAutoreleasePool 池来实现自动发布。

【讨论】:

【参考方案2】:

我不明白你如何重用一个 NSString。重用 NSMutableString 实例可能会比重新创建它稍快一些,但您不会看到差异。专注于代码的简单性和可维护性。

我认为您的问题是使用 [[NSString alloc] init] 还是 [NSString string]。只要性能不是问题,总是选择最简单的。那将是自动发布的版本,因为您不需要自己发布它。

【讨论】:

以上是关于分配和释放 VS。自动释放。为啥和何时?的主要内容,如果未能解决你的问题,请参考以下文章

为啥反复分配和释放内存会耗尽系统所有内存?

线程完成后何时释放线程上分配的对象? [关闭]

自动释放对象递减的保留计数何时减少?

在函数中定义数组:float fltNum[10],该数组在内存中是如何被分配内存空间?何时被释放内存空间?c语言中

资源分配和自动释放

为啥函数执行后没有释放堆上的元素?