我在看一些开源代码,并试图理解为什么作者以特定的方式做了一些事情。
这个类是一个包装器 NSArray 使用push、pop等创建堆栈数据结构。
NSArray
一种方法是 topObject
topObject
- (id)top { return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray }
什么是保留后立即自动释放?
我最初的反应是这样可以防止分析器发出内存泄漏的警告,但是我在没有retain/autorelease的情况下进行了分析,仍然没有任何警告。
所以我不明白在这里使用retain/autorelease。。。
我们假设 top 会是这样的:
top
- (id) top { return [stack lastObject]; }
然后想象一下:
foo = [bar top]; [bar removeAllObjects]; // Do something with foo
foo 会指向释放的内存。但是有了 retain 和 autorelease 福 仍然指向有效的对象。
foo
retain
autorelease
福