1.读写设置

2.retain
自动在set 方法中添加堆引用对象内存管理的方法 并release旧值 retain新值

retain 修饰需要计数的属性
3.assign
--1.不会生成set方法内的内存管理的代码,仅仅只会生成普通的set方法,系统默认修饰符号为assign
--2.assign适用于基本数据类型如int,float,struct等值类型,不适用于引用类型。因为值类型会被放入栈中,遵循先进后出原则,由系统负责管理栈内存。而引用类型会被放入堆中,需要我们自己手动管理内存或通过ARC管理。
--3.assign如果修饰对象,会产生野指针问题;如果修饰基本数据类型则是安全的。修饰的对象释放后,指针不会自动被置空(nil),此时向对象发消息会崩溃。
4.atomic & nonatomic
atomic 原子性 单线程 性能低 (默认属性)
nonatomic 非原子性 多线程 性能高
5.strong
在ARC 下 保存一个对象用strong 相当于MRC下的retain
6.copy
--1.NSString 和其子类需要用Copy修饰 (防止外部修改属性)
若不使用copy 而使用其他别的属性,会造成对象属性指向,str修改,对象属性也随之改变



--2.Block
Block也需要使用copy关键字将默认产生于栈的Block 转移致 堆中
这样在Blcok中引用外界参数时,Block会对该参数retain,保住外界对象不会被提早释放
防止在Block调用时 外界参数已经被释放调用野指针
网友评论