Sun*_*day 4 memory-management runtime objective-c
在寻找NSStack或类似的时候,我遇到了这个代码示例.在该pop方法中,作者明确地保留returnObject然后返回一个autorelease对象.这真的有必要吗?我的印象是运行时会removeLastObject在运行循环迭代结束时(而不是中间某处)破坏从内容中删除的对象.
这真的有必要吗?
如果您仍在使用手动内存管理.如果没有保留,returnObject只要从阵列中删除它就可以解除分配.可变数组保留它包含的对象,并在删除时释放它们.在移除对象之前保留对象可防止对象被释放; 自动释放它允许对象保持足够长的时间以使调用方法接收它.
如果您正在使用ARC(并且没有太多理由),您不必担心任何问题.编译器将确定何时保留以及何时为您释放.
我的印象是运行时将在运行循环迭代结束时通过removeLastObject销毁从内容中删除的对象
如果NSMutableArray在移除对象时自动释放对象会发生这种情况,但我认为没有任何理由认为它确实存在.如果-removeLastObject返回已删除的对象,您可以指望被删除的对象被自动释放,但事实并非如此.你永远不应该假设另一个对象对它拥有的对象做了什么.