你的位置:首页 > 软件开发 > 操作系统 > iOS 图文并茂的带你了解深拷贝与浅拷贝

iOS 图文并茂的带你了解深拷贝与浅拷贝

发布时间:2017-07-21 00:00:23
一、概念与总结 1、浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。 浅拷贝就是拷贝指向原来对象的指针, ...

iOS 图文并茂的带你了解深拷贝与浅拷贝

一、概念与总结

     1、浅拷贝

     浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。

iOS 图文并茂的带你了解深拷贝与浅拷贝

      浅拷贝就是拷贝指向原来对象的指针,使原对象的引用计数+1,可以理解为创建了一个指向原对象的新指针而已,并没有创建一个全新的对象。

      2、深拷贝

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

iOS 图文并茂的带你了解深拷贝与浅拷贝

     深拷贝就是拷贝出和原来仅仅是值一样,但是内存地址完全不一样的新的对象,创建后和原对象没有任何关系。

   

    3、总结:

    深拷贝就是内容拷贝,浅拷贝就是指针拷贝。本质区别在于:

  • 是否开启新的内存地址
  • 是否影响内存地址的引用计数

 

 二、示例分析

      在iOS中深拷贝与浅拷贝要更加的复杂,涉及到容器与非容器、可变与不可变对象的copy与mutableCopy。下面用示例逐一分析:

      1、非集合对象的copy与mutableCopy

        1.1 不可变对象NSString 

- (void) noMutableNSStringTest{  NSString *str1 = @"test001";    NSMutableString *str2 = [str1 copy];  //copy返回的是不可变对象,str2不能被修改,因此会发生崩溃  //[str2 appendString:@"test"];    NSMutableString *str3 = [str1 mutableCopy];  [str3 appendString:@"modify"];    NSLog(@"str1:%p - %@ \r\n",str1,str1);  NSLog(@"str2:%p - %@ \r\n",str2,str2);  NSLog(@"str3:%p - %@ \r\n",str3,str3);}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:iOS 图文并茂的带你了解深拷贝与浅拷贝

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。