大体来说,拷贝一个对象,实际上就是创建一个新的对象,然后用原始对象的值对其进行初始化。
拷贝一些无指针的变量,诸如布尔型、整形、浮点型等,肯定会是直接划等号,但是要拷贝指针变量,就会有两种方式了:
其一是浅拷贝,也就是拷贝指针的值,它和原始对象是指向同一块内存的,也就是说它们是共享这一块数据的;
其二就是深拷贝,它是将原始对象所指的数据复制一遍,并分配给拷贝的实例变量。
实现实例变量的set方法应该反映出所使用的拷贝方式。
如果使用的是深拷贝,那么代码如下:
-(void)setMyVariable:(id) newValue { [myVariable autorelease]; myVariable = [newValue copy]; }
如果要反映出是浅拷贝,那么就应该这样写:
-(void)setMyVariable:(id)newValue { [myVariable aurorealease]; myVariable = [newVariable retain]; }
当然,如果只是assign,实际上也应该将其理解为是一种浅拷贝,示例代码如下:
-(void) setDelegate:(id) newDelegate { delegate = newDelegate; }