首页 > 其他 > 详细

内存管理-深浅拷贝之 copy和mutableCopy

时间:2015-10-29 12:51:03      阅读:216      评论:0      收藏:0      [点我收藏+]

  本文主要研究对不可变对象和可变对象分别进行copy,mutableCopy,对产生的结果,进行探讨内存地址以及是否可变。

  好吧,说的拗口了,先贴结论

技术分享  

上代码:

一、对不可变对象拷贝

NSString * str1=[NSString stringWithFormat:@"str1"];

//    1、定义一个不可变数组
    NSArray *arrImult=[NSArray arrayWithObject:str1];

//    2、对不可变数组进行copy和mutableCopy
    NSMutableArray *arrCopy=[arrImult copy];
    NSMutableArray *arrMultCopy=[arrImult mutableCopy];
    
//    3、打印地址
    NSLog(@"%p",str1);
    NSLog(@"%p",arrImult);
    NSLog(@"arrCopy--->%p",arrCopy);
    NSLog(@"arrMultCopy--->%p",arrMultCopy);
    
//    4、尝试改变
  
    [arrMultCopy  addObject:@"arrMultCopy"];
    NSLog(@"%@",arrMultCopy);
    
    [arrCopy addObject:@"arrCopy"];
     NSLog(@"%@",arrCopy);//报错

 打印信息:

2015-10-29 11:53:24.130 test123[1182:152126] 0x7fbfe8d60790

2015-10-29 11:53:24.130 test123[1182:152126] 0x7fbfe8d60550

2015-10-29 11:53:24.131 test123[1182:152126] arrCopy--->0x7fbfe8d60550

2015-10-29 11:53:24.131 test123[1182:152126] arrMultCopy--->0x7fbfe8d28bc0

2015-10-29 11:53:24.131 test123[1182:152126] (

    str1,

    arrMultCopy

)

最后一个打印报错的信息。。。。

 

    结论:

    1、对不可变的对象做  copy,得到的是不可变对象的地址,浅拷贝,拷贝指针,所以,没有产生新对象,依旧不可变;

    2、对不可变的对象做  mutableCopy ,产生新的对象,该对象是可变的。

 

二、对可变对象进行拷贝

    NSString * str1=[NSString stringWithFormat:@"str1"];
//    1、定义一个可变数组
    NSMutableArray * arrMult=[NSMutableArray arrayWithObject:str1];
//    2、对可变数组进行 copy 和mutableCopy
    NSMutableArray * arrCopy=[arrMult copy];
    NSMutableArray * arrMultCopy=[arrMult mutableCopy];
    
//    3、打印地址
    NSLog(@"arrMult-->%p",arrMult);
    NSLog(@"arrCopy-->%p",arrCopy);
    NSLog(@"arrMultCopy-->%p",arrMultCopy);
//    4、尝试改变
    [arrMultCopy addObject:@"arrMultCopy"];
    NSLog(@"%@",arrMultCopy);
    
    [arrCopy addObject:@"arrCopy"];
    NSLog(@"%@",arrCopy);//报错
    

 打印结果:

2015-10-29 11:39:27.608 test123[1091:145654] arrMult-->0x7fbbe25a0ae0

2015-10-29 11:39:27.609 test123[1091:145654] arrCopy-->0x7fbbe25a01e0

2015-10-29 11:39:27.609 test123[1091:145654] arrMultCopy-->0x7fbbe25a0500

2015-10-29 11:39:27.609 test123[1091:145654] (

    str1,

    arrMultCopy

)

最后一个打印的报错信息。。。

 

结论:

    3、对可变对象做  copy,得到的是新地址,也就是说,产生了新对象,但是,新对象是不可变的;

    4、对可变对象做  mutableCopy,长生新的对象,该对象是可变的。

 

 

 

 

 

 

  

内存管理-深浅拷贝之 copy和mutableCopy

原文:http://www.cnblogs.com/panyuluoye/p/4920012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!