黑马程序员——OC学习笔记—— Copy
copy 即对象拷贝
要使用对象数据而不希望修改对象时,可以使用copy
copy叫做浅拷贝 mutablecopy深拷贝
copy需要遵守NSCopying协议,实现CopywithZone方法
MutableCopy也一样要遵守相应协议
注意:
OC中copy复制的对象都是不可变的 mutablecopy复制的是可变副本
浅拷贝:只拷贝地址,不拷贝空间 是同一个对象,源对象和副本对象引用计数加1,相当于retain一次,所以在手动管理内存是要注意release一次
深拷贝:开辟新的空间存储副本对象,源对象的引用计数不变,副本对象引用计数都为1;
int main(int argc, const char * argv[]) { @autoreleasepool { Dog *d=[Dog new]; d.age=20; d.tel=4100; Dog *d2=[d copy]; NSLog(@"%d %d",d2.age,d2.tel); NSString *str=@"abc"; NSMutableString *str2=[str mutableCopy]; [str2 appendString:@"xxxxx"]; NSLog(@"str2=%@",str2); } return 0; }
实现Copying协议 重写方法
- (id)copyWithZone:(NSZone *)zone
@implementation Dog - (id)copyWithZone:(NSZone *)zone{ //为了让创建的两个对象copy使用不同的空间 要重新分配空间 Dog *d=[[Dog alloc]init]; d.age=self.age; d.tel=self.tel; return d; //注意此处不能返回return self不让两个对象用的是一块空间发生改变会影响对方 } @end