zoukankan      html  css  js  c++  java
  • ios copy和strong,浅拷贝和深拷贝

    copy
    @property (nonatomic, copy) NSString *name;
    self.name = mutableString;
    这时,name对mutableString一个深拷贝,另开辟一个空间,将mutableString内容拷贝到这个空间中,self.name指向这个空间,修改mutableString,不影响self.name。
    self.name = string;
    这时,name对string是一个浅拷贝,只是将指针指向这个string所指向的对象,因为string是不可变对象,self.name也是不可变对象,不会发生修改现象,但可将string指向另个对象,但此时的self.name指向的对象并不会变。

    strong
    @property (nonatomic, strong) NSString *name;
    self.name = mutableString;
    这时,name对mutableString一个浅拷贝,只是将指针指向这个mutablestring所指向的对象,若mutableString对象发生改变,则self.name对象也将发生改变,因为它们始终指向的是同一个对象。
    self.name = string;
    这时,name对string一个浅拷贝,只是将指针指向这个string这个对象,因为string是不可变对象,self.name也是不可变对象,不会发生修改现象,但可将string指向另个对象,但此时的self.name指向的对象并不会变。

    @property (nonatomic, strong) NSMutableArray *array;

    self.array = mutableArray;

    这时,array对mutableArray一个浅拷贝,只是将指针指向这个mutableArray所指向的对象,若mutableArray对象发生改变,则self.array对象也将发生改变,因为它们始终指向的是同一个对象。

    @property (nonatomic, copy) NSMutableArray *array;

    self.array = mutableArray;

    这时,array对mutableArray一个深拷贝,并且array得到的是一个不可变的array,若你对array进行添加元素等操作,则会报错。

    @property (nonatomic, strong) NSArray *array;

    self.array = mutableArray;

    这时,array对mutableArray一个浅拷贝,只是将指针指向这个mutableArray所指向的对象,若mutableArray对象发生改变,则self.array对象也将发生改变,因为它们始终指向的是同一个对象。

    @property (nonatomic, copy) NSArray *array;

    self.array = mutableArray;

    这时,array对mutableArray一个深拷贝,另开辟一个空间,将mutableArray内容拷贝到这个空间中,self.array指向这个空间,修改mutableArray,不影响self.array。

  • 相关阅读:
    vue3.0中如何使用ueditor
    如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索
    select 使其默认选中文本不为空
    java环境配置
    amaze ui 滚动监听
    vue项目中如何使用less
    强大的css3库
    input type file兼容性
    select中想要加a链接 并且新窗口打开
    echarts绘制k线图为什么写candlestick类型就报错
  • 原文地址:https://www.cnblogs.com/dj3839/p/6834715.html
Copyright © 2011-2022 走看看