iOS 关于属性关键字strong/weak/retain/assign/copy的说明

一、关键字通常用在修饰哪些属性?

这里主要介绍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”

你可能感兴趣的:(iOS 关于属性关键字strong/weak/retain/assign/copy的说明)