copy,mutableCopy 理解(2)

来源:未知 责任编辑:责任编辑 发表时间:2013-12-18 11:33 点击:

p>[NSMutableArray mutableCopy]    同上。

p> 

p>NSMutableArray *srcMArray = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"MArray"],@"b",@"c",nil];

p>NSMutableArray *mArrMCopy = [srcMArray mutableCopy];

p>NSArray        *mArrayCopr = [srcMArray copy];

p>(lldb)p srcMArray 

p> 

p>(NSMutableArray *) $3 = 0x0ce70100 @"3 objects" 

p> 

p>(lldb) p mArrMCopy

p> 

p>(NSMutableArray *) $4 = 0x0cf667e0 @"3 objects" 

p> 

p>(lldb)p mArrayCopr

p> 

p>(NSArray *) $5 = 0x0cd82a50 @"3 objects”

p> 

p> 

p> 

p>再说下array里面的对象的问题。前面都提到,不论是NSArray还是NSMutableArray,他们的mutableCopy或者copy返回的对象里面所包含的对象的地址都是一样的,也就是说,里面包含的对象都是指针复制。我这里不能直观的打出array里对象的地址,可以做个测试。

p>NSString *srcObj1 = [arrCopyobjectAtIndex:0];

p>[srcObj1 appendString:@"IOS7"];

p> 

p>NSMutableString *srcObj2 = [arrCopyobjectAtIndex:0];

p> 

p>NSString *srcObj3 = [arrCopyobjectAtIndex:1];

p> 

p>(lldb)po srcArray

p> 

p><__NSArrayI 0xce6fdc0>( aIOS7, sss, c )

p> 

p>(lldb)po arrCopy 

p> 

p><__NSArrayI 0xce6fdc0>( aIOS7, sss, c )

p> 

p>(lldb)po arrMCopy 

p> 

p><__NSArrayM 0xcf6e1e0>( aIOS7, sss, c

p> 

p>)

p>NSArray 的copy 返回的对象,只要修改其包含对象的的内容(前提是该对象可以修改),mutableCopy返回的对象里面的该对象内容也发生了变化。

p>再附上该对象的内存结构:

p>(lldb)p srcObj1 

p> 

p>(NSString *) $8 = 0x0cd92020 @"aIOS7" 

p> 

p>(lldb)p srcObj2

p> 

p>(NSMutableString *) $9 = 0x0cd92020 @“aIOS7"

p> 

p>(lldb)p *srcObj1

p> 

p>(NSString) $5 = {  NSObject = {    isa = __NSCFString  } } 

p> 

p>(lldb)p *srcObj2 

p> 

p>(NSMutableString) $6 = {  NSString = {    NSObject = {      isa = __NSCFString    }  } }

p> 

p>(lldb)p *srcObj3 

p> 

p>(NSString) $7 = {  NSObject = {    isa = __NSCFString  }

p> 

p>}

p> 

p>NSMutableArray 的copy 和mutableCopy可以自己证明下。

p>总结:

p>1:对于不可变对象,copy都是浅复制,即指针复制。mutableCopy 都是Alloc一个新对象返回。

p>2:对于可变对象,copy和mutableCopy都是Alloc新对象返回。

p>3:不论是可变还是不可变对象,copy返回的对象都是不可变的,mutableCopy返回的对象都是可变的。

p>4:容器类对象,不论是可变的还是不可变的,copy,mutableCopy返回的对象里所包含的对象的地址和之前都是一样 的,即容器内对象都是浅拷贝。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1