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。

  • 相关阅读:
    stm32 复位后 引起引脚的变化,输出电平引起的问题
    利用jink的驱动软件j-flash 合并两个hex的方法,bootloader+app
    利用jink调试程序,时间不准的解决办法
    为什么你有10年经验,但成不了专家?
    第二章 信息的表示和处理
    Python人名独特性统计

    Python基本统计值计算
    VScode如何编译多个.C文件
    Python连续质数计算
  • 原文地址:https://www.cnblogs.com/dj3839/p/6834715.html
Copyright © 2011-2022 走看看