在iOS中,我们有时要用到copy的方法。对对象进行拷贝。今天总结了一下拷贝。
1)iOS拷贝都有哪些?
拷贝有三种:浅拷贝,引用计数拷贝,深拷贝。接下来我一一总结。先码后理。
1、浅拷贝
FYWork *w = [[FYWork alloc] init];
__weak FYWork *w1 ;
w1 = w;
w1浅拷贝w 前面用__weak关键字修饰,只是指向w所开辟的空间,但是不持有这块空间。RC值为1.所以当w指针释放的时候,w1的指针变为nil。
2、引用计数拷贝
FYWork *w = [[FYWork alloc] init];
__strong FYWork *w1 ;
w1 = w;
w1引用计数拷贝了w 前面用__strong关键字修饰 不仅指向w所开辟的空间。而且还持有w的空间。RC值为2.当w指针释放的时候,w1没有影响3、深拷贝
FYWork *w = [[FYWork alloc] init];
w.name = @“feng yong”;
FYWork *w1 = [[FYWork alloc]init];
w1.name = w.name;
w1深拷贝了w 是开辟了两块不同的空间,w1指向自己的空间并持有,w也指向自己的空间并持有。RC值为2.并且,当w的name值改变,也和w1的name属性无关copy的用法:
FYWork *w = [[FYWork alloc] init];
FYWork *w1 = [w copy];
但是,使用copy有两个需要做的事:
1.在调用copy方法的对象的类.h中要遵守NSCopying协议
2.在调用copy方法的对象的类.h中要重写allocWithZone方法