美文网首页
copy的使用

copy的使用

作者: Leon_Jiang | 来源:发表于2018-07-25 14:06 被阅读0次

    一 :NSString、NSArray、NSDictionary等经常使用copy关键字:
    1 原因:父类指针可以指向子类对象
    2 目的:本对象的属性不受外界影响(使用copy无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本。使用strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性。)
    3 例如:
    @property (nonatomic, strong)NSString *name;
    此时若将一个可变字符串set给name,那么此时的name则指向的是一个可变字符那么就无法保证name的不可变性 。

    @property (nonatomic, copy)NSString *name;
    此时若将一个可变字符串set给name,此时会执行[MutableString copy]内容复 制,即深复制,将返回一个不可变字符串,即name指向的是一个不可变字符串,以后即使MutableString改变也不会影响name的值。

    二 block也经常使用copy关键字:
    1 原因:block使用copy是从MRC遗留下来的“传统”,在MRC中,方法内部的block是在栈区的,使用copy可以把它放到堆区,在ARC中写不写都行。
    2 block使用copy还是strong效果是一样的,但写上copy也无伤大雅,还能时刻提醒我们:编译器自动对block进行了copy操作。

    三 copy使用需要注意:
    NSMutableString、NSMutableArray、NSMutableDictionary,使用copy应注意:
    1 添加、删除、修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃。因为copy就是复制一个不可变NSArray的对象。
    2 使用了atomic属性会严重影响性能。

    四:在非集合类对象中:
    1、对immutable(不可变)对象进行copy操作是指针复制,mutableCopy操作时内容复制,对mutable对象进行copy和mutableCopy都是内容复制。
    2、用代码简单表示如下:
    [immutableObject copy] // 浅复制
    [immutableObject mutableCopy] //深复制
    [mutableObject copy] //深复制
    [mutableObject mutableCopy] //深复制

    相关文章

      网友评论

          本文标题:copy的使用

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