iOS 工作之余小总结(三) 拷贝----浅拷贝,深拷贝(copy),引用计数拷贝及区别

时间:2021-09-05 19:50:33

  在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方法