Objective c “目标-C静态”;“建造商”我需要保留吗?

Objective c “目标-C静态”;“建造商”我需要保留吗?,objective-c,memory-management,Objective C,Memory Management,我知道如果我用[NSArray array]这样的方法获取一个对象,例如一个NSArray,它将被自动删除。所以我不必自己做发布。我的问题是,我这样做后是否必须保留它?我不这么认为,因为计数从1开始,直到池被释放才被释放,但是我从这些对象中得到了一些糟糕的访问错误。所以为了修复它们,我保留这些对象,然后自己稍后释放它们。这个案子怎么了?我还没有掌握objective-c内存管理吗?自动释放的对象将在运行循环结束时减少其保留计数。因此,如果您有一个对象希望保留的时间比运行循环结束时长,那么您必须保

我知道如果我用
[NSArray array]
这样的方法获取一个对象,例如一个NSArray,它将被自动删除。所以我不必自己做
发布。我的问题是,我这样做后是否必须保留它?我不这么认为,因为计数从1开始,直到池被释放才被释放,但是我从这些对象中得到了一些糟糕的访问错误。所以为了修复它们,我保留这些对象,然后自己稍后释放它们。这个案子怎么了?我还没有掌握objective-c内存管理吗?

自动释放的对象将在运行循环结束时减少其保留计数。因此,如果您有一个对象希望保留的时间比运行循环结束时长,那么您必须保留它。

我衷心建议您不要再考虑保留计数。相反,考虑所有权:您是否希望声明实例的一部分所有权(即,您是否希望确保它一直存在,直到您说不存在为止)?如果是这样,
-保留它。否则,不要保留它。只要您在实例中保留所有权权益,您必须在将来某个时间释放该权益,否则该实例将永远不会被解除分配

您可以假设任何与alloc/new/copy模式不匹配的方法都会返回您没有所有权权益的实例。如果希望它们停留在当前堆栈帧之外,请保留它们


有关此问题和所有其他Objective-C记忆问题,请阅读。然后重读一遍。再一次。这是关于这个问题的权威参考资料。它将是您的朋友。

除非您需要声明对象的所有权,否则您不会保留它。您需要发布一些代码或描述您正在做的事情,然后才能有人帮助您确定错误的方式和原因。

作为旁注,您所谓的“静态”构造函数在Objective-C语言中通常被称为工厂方法。