1、了解深拷贝和浅拷贝
iOS 里面的浅拷贝:
在 iOS 里面, 使用retain 关键字进行引用计数,就是一种更加保险的浅拷贝。他既让几个指针共用同一片内存空间,又可以在release 由于计数的存在,不会轻易的销毁内存,达到更加简单使用的目的。
iOS 里面的深拷贝:
深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
2、Objc对象拷贝构造:
- 在OC中要想自定义的类具有拷贝功能(也就是能用copy方法)则类必须遵守NSCopying协议,并且实现协议中的(id)copyWithZone:(NSZone *)zone方法;
- 在这个方法中我们可以根据自己的实际情况来实现,不同的实现方式,copy出来的对象具有不同的效果
类的深/浅拷贝也就是在这个方法中体现,具体如下 - 同理,NSMutableCopying也是可以按照下面实现。。。
(1)自定义浅拷贝
-(id)copyWithZone:(NSZone *)zone
{
//创建新的对象空间
Student *stu = [[self class] allocWithZone:zone];
//将属性复制---其实只是复制了地址
stu.name = self.name;
stu.sex = self.sex;
stu.age = self.age;
return stu;
}
(2)自定义深拷贝
-(id)copyWithZone:(NSZone *)zone
{
//创建新的对象空间
Student *stu = [[self class] allocWithZone:zone];
//为每个属性创建新的空间,并将内容复制
stu.name = [[NSString alloc] initWithString:self.name];
stu.sex = [[NSString alloc] initWithString:self.sex];
stu.age = self.age;
return stu;
}
3、NSString的Copy和MutableCopy
//Copy
NSString *str = @"嘹亮的小浩子";
NSString *str1 = [str copy];
NSLog(@"str地址%p ---- str1地址%p",str,str1);
//输出,得出的结果,对NSString进行copy只是指针拷贝
2016-07-18 22:32:06.833 深拷贝和浅拷贝[12603:1256836] str0x1090ea068 ---- str10x1090ea068
//MutableCopy
NSString *str = @"嘹亮的小浩子";
NSString *str1 = [str mutableCopy];
NSLog(@"str地址%p ---- str1地址%p",str,str1);
//输出,得出的结果,对NSString进行MutableCopy进行内容拷贝,生成新的对象
** 以下总结**
未完待续