美文网首页
iOS 关于属性关键字strong/weak/retain/as

iOS 关于属性关键字strong/weak/retain/as

作者: Ryan_RH | 来源:发表于2017-01-23 14:00 被阅读0次

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

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

          本文链接:https://www.haomeiwen.com/subject/jsmmettx.html