标签:objective-c 指针
对象的复制有深复制和浅复制两种,听上去高大上会很难,其实很简单;
来举个例子:
NSMutableArray * array1 = [NSMutableArray arrayWithObjects:@"a" ,@"b", nil]; NSMutableArray *array2 = array1; [array2 addObject:@"c"]; for(NSString *s in array1) { NSLog(@"%@",s); }
2014-08-16 11:17:21.524 text[1679:303] a 2014-08-16 11:17:21.526 text[1679:303] b 2014-08-16 11:17:21.526 text[1679:303] c
这就是浅复制,我们复制了数组array1的指针给array2,假设array1指向oxfffff这个区域,现在我们将array2 =array1是将array1指向的地址赋值给了array2,当我们操作array2时实际上是操作的那块区域,而array1也指向那块区域,所以就会出现这个结果;
这就是浅复制;
深复制:
上面的例子中,如果要想修改array2,而array1不变就需要使用深复制。深复制有可变复制和不可变复制,意思就是复制体可不可以变,就像nsarray是不可变的而nsmutablearry是可变的。需要用到 copy和mutablecopy方法;
如果是系统提供的类,如NSArray、NSString等可以直接使用copy、mutablecopy方法;
如果是自己创建的类,我们需要来实现代理<NSCopying>
需要实现里面的
-(id)copyWithZone:(NSZone *)zone
-(id) mutableCopyWithZone:(NSZone *)zone
方法,一个代表着是不可变复制,一个是可变复制;实现方法:
-(id)copyWithZone:(NSZone *)zone { first *new = [[first allocWithZone:zone]init]; new.string = self.string; return new; } -(id) mutableCopyWithZone:(NSZone *)zone { first *new = [[first allocWithZone:zone]init]; new.string = self.string; return new; }
看一下代码其实就明白深复制是什么意思了,深复制就是重新开辟一块空间,用原来的值进行初始化;
就是这样;
objective-c 复制对象,布布扣,bubuko.com
标签:objective-c 指针
原文地址:http://blog.csdn.net/u010123208/article/details/38611479