IOS开发--第四阶段--Copy
深拷贝与浅拷贝
只有实现了NSCoping协议的对象才能进行copy,自定义对象的copy需要实现NSCopy协议,具体是深拷贝还是前拷贝取决于协议如何实现
copy得到的类型一定是不可变的;mutableCopy得到的类型一定是可变的
浅拷贝:拷贝过后内存地址(指针)没有改变;
深拷贝:拷贝过后内存地址(指针)发生改变;
不可变的类型进行不可变的拷贝是浅拷贝,其他都是深拷贝;只要见到mutable,都是深拷贝(不管是拷贝类型还是拷贝方法);
1)NSString: copy 浅拷贝 , 拷贝过后为 NSString 不可变;
mutableCopy 深拷贝, 拷贝过后为 NSMutableString 可变;
2)NSMutableString: copy 深拷贝 , 拷贝过后为 NSString 不可变;
mutableCopy 深拷贝 , 拷贝过后为 NSMutableString 可变;
(NSArray, NAMutableArray) (NSDictionary, NSMutableDictionary) NSSet(集合)同上类似
注意:
错误代码:@property ( nonatomic,copy)NSMutableArray * mutableArray;
运用该种写法时必须重写其set放法;
正确写法:@property ( nonatomic,retain)NSMutableArray * mutableArray;
原文:http://www.cnblogs.com/gegeboke/p/4364963.html