我知道如果我使用类似[NSArray array]
的方法获得一个对象,例如NSArray,它将被自动释放。所以我自己不必做release
。我的问题是,在我这样做之后我是否必须保留它?我不会这么想的,因为计数从1开始并且在池被释放之前它不会被释放,但是当我没有时,我从这些对象中得到了一些错误的访问错误。所以要修复它们,我保留这些对象,然后自己释放它们。在这种情况下发生了什么?我还没有抓住客观的内存管理吗?
答案 0 :(得分:3)
我衷心建议你不要考虑保留计数。相反,想想所有权:你想要声明一个实例的所有权(即你是否要确保它保持不变,直到你说不是)?如果是,-retain
它。否则,请不要-retain
它。只要您保留对实例的所有者权益,您必须在将来的某个时间-release
感兴趣,否则实例将永远不会被释放。
您可以假设任何与alloc / new / copy模式不匹配的方法都会返回不具有所有权权益的实例。如果您希望它们保持在当前堆栈帧之外,请保留它们。
对于本期和所有其他Objective-C内存问题,请阅读Memory Management Programming Guide。然后重新阅读它。再次。它是该主题的权威参考。这将是你的朋友。
答案 1 :(得分:0)
自动释放的对象将在运行循环结束时减少其保留计数。因此,如果你有一个对象要保持比运行循环结束更长的时间,是的,你必须保留它。
答案 2 :(得分:0)
除非您需要声明对象的所有权,否则不会保留。在任何人可以帮助您确定错误的原因和原因之前,您需要发布一些代码或描述您正在做的事情。