iOS 关于属性关键字strong/weak/retain/as
一、关键字通常用在修饰哪些属性?
这里主要介绍ARC环境下的属性关键字的使用
weak:相当于assign,用于修饰弱引用的属性,与assign不同的地方是,weak会在对象消失的时候自动把指针置为nil,常用于UI控件。
assign:常用于基本数据类型、枚举、结构体等非OC对象类型。
strong:相当于retain,用于修饰强引用的属性,释放旧的对象,将旧的对象的值赋予新的对象,并增加索引计数+1,一个对象发生改变另一个对象也变化,就像人与影子的关系一样,常用于指针变量,如NSObject及其子类。
copy:建立一个索引计数为1的对象,然后释放旧的对象,一个对象发生变化不影响另一个对象,就像人与其他人的关系一样,常用于NSString类型、block类型。
二、关键字的区别
1.weak和strong关键字的区别
weak和strong不同的是,当一个对象不再有strong类型的指针指向它的时候,它会被释放,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
2.strong(retain)和copy关键字的区别
strong是指针拷贝,copy是内容拷贝。
使用strong修饰的属性,进行对象赋值后就像人与影子的关系,人在动影子也在动,一个对象改变另一个对象也跟着变化。代码示例如下:
@property(strong) NSString *myObject;
NSMutableString*otherObject = [NSMutableString stringWithFormat:@"abcd"];
self.myObject= otherObject;
[otherObject appendString:@"123"];
NSLog(@"%@",self.myObject);//输出@“abcd123”
使用copy修饰的属性,进行对象赋值后就像人与人的关系,敌动我不动,一个对象改变不影响另一个对象。
@property(copy) NSString *myObject;
NSMutableString*otherObject = [NSMutableString stringWithFormat:@"abcd"];
self.myObject= otherObject;
[otherObject appendString:@"123"];
NSLog(@"%@",self.myObject);//输出@“abcd”