深浅拷贝

对象Copy

1.copy和mutableCopy消息

  1)copy消息

    作用:拷贝对象

    (1)拷贝不可变对象,则拷贝结果为不可变

    (2)拷贝不可变对象相当于retain一次该对象

    (3)若拷贝的对象为可变对象,则拷贝结果为不可变

    (4)拷贝可变对象,会创建一个新的对象并且将新对象的计数器设置为1

 注:用copy,不管你拷贝可变还是不可变的对象,拷贝结果都不可变.

顺便补充一个知识:

  判断某个对象是否为某种类型的方法?

  isMemberOfClass

例子:NSArray *arr = [[[NSArray alloc] initWithObjects:@"啦啦", nil] autorelease];

   BOOL flag = [arr isMemberOfClass:[NSMutableArray class]];  //显然,这里flag肯定是NO了(父亲怎么会是儿子类型嘛)

 

  2)mutableCopy消息

    作用:拷贝对象

  (1)若拷贝的对象如果为不可变对象,则拷贝结果为可变

  (2)若拷贝的对象为可变对象,则拷贝结果为可变

  (3)都生成了新的对象

总而言之,用mutableCopy,就产生一个可变的新对象.

 

2.总结一下浅拷贝和深拷贝:

  浅拷贝:简单的指针赋值,新指针和旧指针指向同一片内存地址(没产生新对象)

  深拷贝:新指针和旧指针各自使用不同的内存地址(产生了新对象)

 

备注:在黄金法则里面我们说有copy,就要release,其实本质上不是说出现了这个copy关键字,就要release,而是因为在copy的具体操作过程中,出现了retain,所以才要我们release.

 

posted on 2015-04-16 12:56  雾里探花水中捞月  阅读(474)  评论(0)    收藏  举报

导航