如何确定是否需要保留或分配财产?

Tha*_*nks 33 iphone cocoa-touch objective-c

当我应该使用retain时,以及在分配时,是否有任何好的规则要学习?

Mar*_*eau 53

赋值用于原始值,如BOOL,NSInteger或double.对于对象,使用保留或复制,具体取决于您是要保留对原始对象的引用还是复制它.

唯一常见的例外是弱引用,您希望保留指向对象的指针,但由于引用周期而无法保留它.一个示例是委托模式,其中对象(例如表视图)保持指向其委托的指针.由于委托对象保留了表视图,因此让表视图保留委托将意味着不会释放任何一个.在这种情况下使用弱引用.在这种情况下,您将在创建属性时使用assign.


Mar*_*don 4

我认为,在处理对象时,您几乎总是使用保留而不是分配,而在处理原始类型、结构等时,您将使用分配(因为您不能保留非对象)。那是因为您希望具有属性的对象决定何时完成该对象,而不是其他东西。Apple 的内存管理指南指出:

\n\n
\n

有时您不希望处理接收到的对象;例如,您可能需要将对象缓存在实例变量中。在这种情况下,只有您知道何时不再需要该对象,因此您需要有能力确保该对象在您仍在使用时不会被丢弃。您可以使用保留消息来执行此操作,该消息保留挂起的自动释放的效果(或抢占稍后的释放或自动释放消息)。通过保留一个对象,您可以确保在使用完它之前它不会被释放。

\n
\n\n

有关使用复制与保留的讨论,请参阅此问题

\n