强引用(在大多数情况下都会使用)意味着您希望"拥有"使用此属性/变量引用的对象.编译器会注意,只要您用强引用指向指定给该属性的任何对象,它就不会被销毁.只有将属性设置为nil
,对象才会被销毁(除非一个或多个其他对象也具有对它的强引用).
相比之下,弱引用表示不想控制对象的生命周期.您正在弱引用的对象仅存在,因为至少有一个其他对象具有对它的强引用.一旦不再是这种情况,对象就会被销毁,而您的弱属性将自动设置为nil
.iOS中最常见的弱引用用例有:
委托属性,通常被弱引用以避免保留循环,以及
视图控制器主视图的子视图/控件,因为这些视图已被主视图牢牢控制.
原子与非原子是指编译器为属性合成的getter和setter方法的线程安全性.atomic(默认)告诉编译器使访问器方法线程安全(通过在访问ivar之前添加锁),而非atomic则相反.非原子的优点是性能稍高.在iOS上,苹果几乎所有的属性都使用非原子,所以一般建议你也这样做.