oc中的一些指示符
Objective-c中的一些指示符
引言
我们在使用@property定义时,可以在@property与类型之间用括号添加一些额外的指示符,下面来简单解释一下
常用指示符
1.assign
该指示符号对属性只是简单的赋值,不更改引用计数。常用于NSInteger等OC基础类型,以及int,double等我们所熟知的C数据类型。
使用建议:我们在定义int啊,double啊等等类型的,用assign
2.retain
当我们把某个对象赋值给该属性时,该属性原来所引用的对象的引用计数减1,被赋值对象的引用计数加1。在未启用ARC机制的的情况下,retain可以保证一个对象的引用计数大于1时,该对象不会被回收。启用ARC后一般较少使用retain
3.strong && weak
strong指示符该属性对被赋值对象持有强引用,而weak指示符指定该属性对被赋值对象持有弱引用。
强引用的意思是:只要该强引用指向被赋值的对象,那么该对象就不会自动回收。
弱引用的意思是:即使该弱引用指向被赋值的对象,该对象也可能被回收。
如果不希望对象被回收,可以使用strong指示符。
如果需要保证程序性能,避免内存溢出,可以使用weak,内存一旦被回收,指针会被赋值为nil。
使用建议:
1.对象一般使用strong
2.所有UI界面的对象使用weak
4.copy
如果使用copy指示符,当调用setter方法对成员变量赋值时,会将被赋值的对象复制的一个副本,再将该副本给成员变量,相应的原先的被赋值的对象的引用计数加1。当成员变量的类型是可变类型,或其子类是可变类型,被赋值的对象在赋值后有可能再被修改,如果不需要这种修改,则可以考虑copy指示符。
5.atomic && nonatomic
指定setter和getter是否是原子操作,即是否线程安全。如果是atomic,那么存取方法都是线程安全的,即某一线程访问存或者取方法,其他线程不可以进入该存、取方法。nonatomic则不具备线程安全的功能。需要指出的是atomic是默认值,可以保证数据的完整性,但是相应的降低了性能。
使用建议:单线程环境中建议使用nonatomic来提升性。

浙公网安备 33010602011771号