iOS的深拷贝和浅拷贝

2016-07-19  本文已影响90人  嘹亮的浩哥

1、了解深拷贝和浅拷贝

iOS 里面的浅拷贝:

在 iOS 里面, 使用retain 关键字进行引用计数,就是一种更加保险的浅拷贝。他既让几个指针共用同一片内存空间,又可以在release 由于计数的存在,不会轻易的销毁内存,达到更加简单使用的目的。

iOS 里面的深拷贝:

深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。

2、Objc对象拷贝构造:

(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进行内容拷贝,生成新的对象

** 以下总结**

别人总结的,拿来借鉴以下
未完待续
上一篇 下一篇

猜你喜欢

热点阅读