iOS属性修饰符的作用
2018-07-24 本文已影响227人
风中尘埃飘过
strong 修饰符(与retain的作用基本相同)
1.strong是一个属性的默认修饰符。
2.strong修饰的对象在引用计数为0时被销毁。(强引用)
weak 修饰符
1.弱引用声明类型。
2.当weak修饰的对象时,对象的引用计数为0时,对象释放的同时指针地址置为nil。一般用来打破循环引用和修饰delegate。
assign 修饰符
1.弱引用声明类型,一般用来修饰基本数据类型。
2.当assign修饰的对象时,对象的引用计数为0时,对象释放之后,指针地址不会被置为nil。就会出现野指针。所以我们一般不能使用assign修饰对象。
3.那为什么可以用assign修饰基本数据类型?因为基础数据类型一般分配在栈上,栈的内存会由系统自己自动处理,不会造成野指针。
copy 修饰符
1.copy修饰的对象是不可变的。
2.相当于在调用对象的set方法时新拷贝了一份。
@property (nonatomic, copy) NSArray *datas;
NSMutableArray *datas = [NSMutableArray arrayWithObject:@"data"];
self.datas = datas //相当于 self.datas = [datas copy]; 所以说就算你在后面修改datas里面的对象个数,也不会影响self.datas里面的对象个数。这也是为什么我们在使用NSString属性的时候建议使用copy修饰符,这样能防止NSString在使用过程中被修改的问题。
atomic 修饰符
1.能保证线程安全,缺点是性能低。
nonatomic 修饰符
1.允许多个线程同时访问,不能保证线程安全。性能高。系统中一般都是使用nonatomic,特殊情况下才会使用atomic。
readwrite 修饰符
1.readwrite是默认的修饰符。不给属性添加相关的属性,这个对象都是可以进行读写操作的
2.readwrite修饰的属性,系统会自动生成set和get方法。
readonly 修饰符
1.readonly修饰的属性,系统只会生成get方法,不会生成set方法。