黑马程序员技术交流社区

标题: copy的概念及入门 [打印本页]

作者: 956251361    时间: 2016-1-2 12:15
标题: copy的概念及入门
1.什么是copy
copy的字面意思就是复制,拷贝,是一个产生副本的过程
对象拷贝的目的:要使用某个对象的数据,但是在修改对象的时候不影响原来对象的内容.
常见的赋值有用一个源文件产生:文件赋值
作用:一个副本文件
2.copy的特点
修改源文件的内容,不会影响副本文件
修改副本文件的内容,不会影响源文件
OC中的copy,就是值的对象的拷贝
作用:利用源对象产生一个副本对象

3.如何使用copy功能
一个对象调用copy或mutableCopy方法创建一个副本对象
如果源对象是不可变的,那么copy的副本对象也是不可变的
如果源对象是可变的,那么mutableCopy的副本对象就是可变对象

4.使用copy功能的前提
copy:需要遵守NSCopy协议,实现copyWithZone方法

mutableCopy:需要遵守NSMutableCopying协议,实现mutableCopyWithZone方法

copy就是浅复制,因为没有产生新的对象(有没有产生新的对象也是判断深浅复制的标准)
此处copy产生的副本是不可变的

mutableCopy就是深复制,会在内存中重新分配一块内存空间
  1. //创建一个字符串对象
  2.     NSString *str = @"abc";
  3.     NSLog(@"str = %@,addr = %p",str,str);

  4.     //不可变的对象  copy  产生的副本对象  也是不可变的
  5.     NSString *str2 = [str copy];
  6.     NSLog(@"%ld",str2.length);

  7.     //不可变的对象  mutableCopy  产生的副本对象是可变的
  8.     NSMutableString *str3 = [str mutableCopy];

  9.     //在str3中添加字符xxxx
  10.     [str3 appendString:@"xxxx"];
  11.     NSLog(@"%@,%@",str3,str);


  12.     //可变对象  copy  产生的副本不可变
  13.     //可变对象  mutableCopy   产生的副本是可变的
  14.     NSMutableString *str = [NSMutableString string];
  15.     [str appendString:@"abc"];

  16.     NSMutableString *str2 = [str mutableCopy];
  17.     [str2 appendString:@"abc"];

  18.     NSLog(@"str2 = %@",str2);
复制代码

作者: yfh349958021    时间: 2016-1-2 15:34
分析的很透彻,感谢楼主




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2