NSArray copy stong 问题

先定义几个temp数组

    ///-------------------------------
    /// @name 首先看 NSArry中关于 strong 和 copy 的区别
    ///-------------------------------
    
    NSArray *tempArry = [NSArray arrayWithObjects:@"1", @"2", nil]; //0x60800003b080
    NSArray *tempArry2 = [NSArray arrayWithObjects:@"3", @"4", nil]; //0x60800003dae0
    NSArray *tempArry3 = [[NSArray alloc] initWithObjects:@"10", @"100", nil];
    NSMutableArray *tempMutableArry = [NSMutableArray arrayWithObjects:@"5", @"6", nil];




对 ( copy*) NSArry = NSMutableArry进行测试

    
    ///-------------------------------
    /// @name NSArry copy NSMutablerry
    ///-------------------------------

tempMutableArry数组指向地址: 0x60000004e760 , 数组地址:0x7fff529eda68


    //cArry 数组指向地址: 0x600000221fc0 , 数组地址:0x7fff529ed970
    //cArry 数组元素:5
    //cArry 数组元素:6
    self.cArry = tempMutableArry;
    #等价于 self.cArry = [tempMutableArry copy];


    //cArry 数组指向地址: 0x600000221fc0 , 数组地址:0x7fff529ed970
    //cArry 数组元素:5
    //cArry 数组元素:6
    tempMutableArry[1] = @"123";



总结

OC 语言的深拷贝和浅拷贝的区别:有没有产生新对象,即开辟新的内存。

  • 深拷贝,产生新的对象,开辟新的内存空间
    浅拷贝,不产生新的对象,不开辟新的内存空间,只是把指针指向原来对象的内存地址。
拷贝的目的是产生两个互不影响的对象,所以:
  1. 对不可变对象来说,由于对象本身不可以进行修改,即不能对它产生影响。所以不可变对象的 copy 都是浅拷贝。
  2. 不可变对象的 mutableCopy 是深拷贝。
  3. 可变对象的 copy 是深拷贝。
  4. 可变对象的 mutableCopy 是深拷贝。
  5. 把一个NSMutableString变量mutableString赋值给一个copy修饰的NSSrting属性string( self.string = mutableString;), 等价于self.string = [mutableString copy];



你可能感兴趣的:(NSArray copy stong 问题)