美文网首页
iOS copy 与 strong 属性的真正区别

iOS copy 与 strong 属性的真正区别

作者: JohnayXiao | 来源:发表于2019-07-22 17:20 被阅读0次

    当copy修饰的String属性赋值时的对象是一个不可变对象的时候, 不会发生内存的拷贝行为, 只是发生了指针的强引用(指针重新指向);
    当copy修饰的String属性赋值的对象是一个可变对象的时候才会发生内存的拷贝;
    用strong修饰NSString:对象属性和源字符串公用了一块内存,源字符串的引用计数+1;

    为什么日常开发NSString属性用copy修饰:

    例如用一个可变字符串A给用copy修饰的属性B赋值则A再次拼接改变的时候, B的值不会变,因为copy出来一块新的内存区域; 而用strong修饰的时候A改变时B也会跟着改变,因为strong强行引用指针,是同一块内存区域

    为什么日常开发NSMutableString属性用strong修饰:

    用copy修饰的时候其实拷贝出来的一块内存区域是不可变, 用一个可变字符串给他赋值, 然后拼接这个属性时就会崩溃, 用strong修饰的时候就不会出现这种情况, 因为strong修饰后是指针强引用, 始终指向的同一块内存区域

    为什么日常开发NSArray属性用copy修饰:

    如果用strong修饰的话,用一个可变数组给他赋值,然后可变数组改变后,这个NSArray内容也会跟着改变,这明显有违背NSArray原则, 但是用copy修饰的话这时用可变数组给其赋值,相当于是重新拷贝了一份内存区域;

    为什么日常开发NSMutableArray属性用strong修饰:

    类似于NSMutableString的问题,如果用copy修饰这个数组,相当于copy了一份不可边的内存区域, 你对他更改的时候就会crash

    相关文章

      网友评论

          本文标题:iOS copy 与 strong 属性的真正区别

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