1.atomic与nonatomic
- atomic:默认,这个属性是为了保证程序在多线程情况,编译器会自动生成互斥加锁代码,避免该变量的读写不同步问题
- nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成互斥加锁代码,可以提高效率。
2.strong与weak(strong与retain功能相似;weak与assign相似,只是当对象消失后weak会自动把指针变为nil;)
- strong:强引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。如果一个对象被另一个对象持有强引用就不会被释放。NSMutableArray、NSMutableDictionary、NSMutableString、UIImage等NS、UI开头的oc对象都可以用strong。
- weak:弱引用,不决定对象的存亡。即使一个对象被其他对象持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。
只适用与oc对象类型而不是数据类型,通常为用于UI控件。
3.assign、copy、retain
- assign:默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。适用于oc基本数据类型和c语言数据类型(NSInteger、CGFloat、int、char等)。
- retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。适用于多数oc对象。
- copy:将内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1,在赋值时使用传入值的一份拷贝。适用于 NSString、NSData、NSDate、NSNumber、NSValue、NSArray、NSDictionary等。