copy和mutableCopy

    //对象为可变字符串时
    NSMutableString * string = [NSMutableString string];
    [string appendString:@"1"];
    [string appendString:@"2"];

    //深拷贝
    NSString * str1 = [string copy];//开辟新的内存 产生不可变对象类型
    //深拷贝
    NSMutableString * str2 = [string mutableCopy];//开辟新的内存 产生可变对象类型

    //对象为不可变字符串时
    NSString * string = @"sb";
    //浅拷贝
    NSString * str1 = [string copy];//指针指向原来的内存地址 没有新开辟内存空间
    //深拷贝
    NSMutableString * str2 = [string mutableCopy];//开辟新的内存 为可变类型

实现拷贝的语法

  • copy
    - 只会产生不可变的副本(比如NSString)
    - 浅拷贝是拷贝指针地址
  • mutableCopy
    - 只会产生可变的副本(比如NSMutableString)
    - 深拷贝是拷贝内容 重新开辟新的内存空间

以此类推NSArray和NSMutaleArray也是一样的原理

注意:此方法只针对系统的copy如果是自定义的对象要NSCopying要遵守协议
并实现下面方法





- (id)copyWithZone:(NSZone *)zone
{
    Person * p = [[Person allocWithZone:zone ]init ];
    
    //在这里可以赋值
    p.age = self.age;
    
    return p ;
}

@property中的copy

当赋值对象为可变字符串时
为strong时 外面穿什么值 里面就赋什么值 当赋值对象为可变的时候值会随着外面的值变化而变化
为copy时对象是不可变的 当赋值对象为可变的时候里面的对象是不会随着外面的值变化而变得

总结:


Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容