1、copy,是复制引用对象地址的深拷贝
a:当修饰不可变类型的属性时,如NSArray、NSDictionary、NSString,用copy,用copy为关键字的话,调用setter方法后。是对赋值对象进行深拷贝,创建了一个新的对象,不会根据原值的改变而改变。被strong修饰之后,由于只是强引用,所以副本对象数组和源对象数组只是指向同一个内存区域,这样就会造成副本对象数组会随着源对象数组的改变而改变,即便有时候你并不想让副本对象跟着改变。如果希望字串的值跟着赋值的字串的值变化,可以使用strong。所以用copy修饰的mutableArray也被视为Array了,所以再用mutableArray的方法就会发生崩溃。
b:当修饰block类型的属性时,如@property (nonatomic, copy) MobileNumberBlock mobileNumberBlock;主要是arc环境下访问外界变量的block默认存放在栈上,但是外界变量销毁后block也会废弃,为了延长其生命周期,编译器会自动将其从栈拷贝到堆上,执行的是copy方法的实例。
2、weak,修饰对象弱引用,不会引起循环引用,避免内存泄漏
a:xib拖拽生成的系统控件@property (weak, nonatomic) IBOutlet UILabel *errorLabel;
b:代理的属性变量@property (nonatomic, weak) id <CCHighSeasPoolDistributeDelegate> delegate;
3、strong修饰自定义控件、类对象、可变类型对象@property (nonatomic, strong) NSMutableArray *searchList;被strong修饰之后,由于只是强引用,所以副本对象数组和源对象数组只是指向同一个内存区域,这样就会造成副本对象数组会随着源对象数组的改变而改变
4、assign 修饰各种常量@property (nonatomic, assign) BOOL isSearch;