【发布时间】:2012-12-18 18:54:01
【问题描述】:
我是一个 Objective-c 新手,我只是不明白为什么释放不属于我的对象是个坏主意。
假设我在名为Europe的方法中有这个
//initForStringTheory is a class init method;
Collider *LHC = [Collider initForStringTheory];
//Colliders is a NSMutableArray
[Colliders addObject: LHC]
[LHC release]
我被建议不要在Europe 中释放LHC,因为Europe 不拥有LHC,它只有一个指向它的指针。因此我应该充分利用自动释放池并做
//newCollider is a pointer for the newly created instance in initForStringTheory
return [newCollider autorelease];
在initForStringTheory。但为什么呢?
Europe 中的指针不也指向实例吗?为什么我不能只在Europe 中释放LHC 而不是在init 方法中返回自动释放newCollider?
【问题讨论】:
-
既然 ARC 可用,那么使用手动内存管理确实没有太多理由。
-
@dandan78 手动内存管理很重要。即使 ARC 为您执行此操作。核心基金会就是这样一个例子。例如,它需要了解 MMM。 ARC 不会为您管理它。
-
@flex Point 承认了。但是,我认为使用它可能不是一个好主意,除非你必须这样做,因为它会引入内存泄漏的可能性。
-
@dandan78 此外,ARC 也并非没有泄漏。有周期是很常见的。无论如何,我真的建议了解这些概念,以更深入地了解 ARC 的工作原理。干杯。
标签: ios memory-management autorelease reference-counting