现在的位置: 首页 > 综合 > 正文

深拷贝和浅拷贝

2013年09月09日 ⁄ 综合 ⁄ 共 543字 ⁄ 字号 评论关闭

          大体来说,拷贝一个对象,实际上就是创建一个新的对象,然后用原始对象的值对其进行初始化。

       拷贝一些无指针的变量,诸如布尔型、整形、浮点型等,肯定会是直接划等号,但是要拷贝指针变量,就会有两种方式了:

       其一是浅拷贝,也就是拷贝指针的值,它和原始对象是指向同一块内存的,也就是说它们是共享这一块数据的;

       其二就是深拷贝,它是将原始对象所指的数据复制一遍,并分配给拷贝的实例变量。

实现实例变量的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;
}

抱歉!评论已关闭.