autorelease 优先 retain 其次

Tip

给对象赋值时遵守 autorelease之后</span> <span class="pre">retain 的模式。

当给一个变量赋值新的对象时,必须先释放掉旧的对象以避免内存泄露。有很多 “正确的” 方法可以处理这种情况。我们则选择 “autorelease 之后 retain” 的方法,因为事实证明它不容易出错。注意大的循环会填满 autorelease 池,并且可能效率上会差一点,但权衡之下我们认为是可以接受的。

  1. - (void)setFoo:(GMFoo *)aFoo {
  2. [foo_ autorelease]; // Won't dealloc if |foo_| == |aFoo|
  3. foo_ = [aFoo retain];
  4. }