深浅拷贝
对象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.
浙公网安备 33010602011771号