有没有一些好的规则可以学习,来决定何时使用retain,何时使用assign?
有没有一些好的规则可以学习,来决定何时使用retain,何时使用assign?
Assign关键字通常用于原始值类型,如BOOL、NSInteger或double。对于对象,请使用retain或copy,具体取决于您想保留原始对象的引用还是创建对象的副本。
唯一的例外是在需要保留指向对象的指针但由于引用循环而无法使用retain时,应该使用弱引用。一个例子是委托模式,其中一个对象(例如表视图)保持对其代理的指针。由于代理对象保留了表视图,让表视图保留代理会导致它们两个都永远不会释放。在这种情况下,应该使用弱引用。在创建属性时,您应该使用assign关键字。
我知道这是一个旧问题,但我发现Uber大师Matt Gallagher的这些指南非常有用:http://cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html。在我的情况下,我因为对父对象有一个强引用而陷入了"保留地狱"。