2009-04-24 72 views

回答

4

我会认为,在处理对象时,您几乎总是使用retain而不是assign,并且在处理基本类型,结构等时,您将使用assign(因为您不能保留非对象)。那是因为你想让属性的对象决定何时完成对象,而不是别的。 Apple的内存管理指南指出:

有时您不希望 收到的对象被丢弃;对于 示例,您可能需要将 对象缓存在实例变量中。在 这种情况下,只有当您知道何时不再需要对象 ,所以您需要 需要电源才能确保 对象未被丢弃,而您的 仍在使用它。你这样做了 保留的消息,它可以停留未决自动释放的效果 (或抢占 后来释放或自动释放 消息)。通过保持一个对象,你 确保它不会被释放 ,直到你用它做。

有关使用副本vs保留的讨论,请参阅this SO question

0

如果您打算保留该对象,并使用它,使用保留。否则,它可能会被释放,最终会出现代码错误。

53

分配为像BOOL,NSInteger的或双原始值。对于使用保留或复制的对象,取决于您是要保留对原始对象的引用还是复制该对象。

唯一相同的例外是弱引用,要一个指针保持一个对象,但不能保留它,因为参考周期。这方面的一个例子就是委托模式,其中一个对象(例如一个表格视图)保存一个指向其委托的指针。由于委托对象保留了表视图,因此让表视图保留委托将意味着任何一个都不会被释放。在这种情况下使用弱引用。在这种情况下,您可以在创建财产时使用分配。

相关问题