作为一个 Cocoa/Obj-C 新手,我正在阅读 Aaron Hillegass 的“Mac OS X 的 Cocoa 编程”一书 - 撇开现在我们也有机会使用 GC 来避免所有这些推理的事实不谈 - 我不是当然,我知道其中一些保留的原因。
特别是在 Aaron 给出的一个良好编程实践的例子中:
- (void) setFoo:(NSCalendarDate *)x
{
[x retain];
[foo release];
foo = x;
}
我不明白在方法的第一行保留 x 实例的原因:
[x retain];
这个实例的范围只是 set 方法,对吧?退出方法范围时,无论如何都应该释放 x 实例,不是吗?此外,当将 x 分配给 foo 时:
foo = x;
foo 无论如何都会指向 x 个内存单元,因此会增加指向的对象保留计数,不是吗?这应该确保内存不会被释放。
那么,有什么意义呢?当然,我确信我错过了一些东西,但不知道到底是什么。
谢谢,法布里齐奥