重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
学习资料 首先iOS拷贝可以区分为 深拷贝 和 浅拷贝 。 浅拷贝 :拷贝了对象的指针,可以理解为给一条狗加了一条绳子。 深拷贝 :直接拷贝对象到另外一块内存地址中,可以理解为新买了一条狗。
十载的北海街道网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整北海街道建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“北海街道网站设计”,“北海街道网站推广”以来,每个客户项目都认真落实执行。
浅拷贝就是拷贝指向原来对象的指针,使原对象的引用计数+1,可以理解为创建了一个指向原对象的新指针而已,并没有创建一个全新的对象。
用copy修饰的属性,在setter时,会先调用传入对象的copy方法得到一份拷贝后再retain,但不同的对象调用copy方法,可能是深拷贝也可能是浅拷贝,如果是浅拷贝,则两个指针指向一个内存,旧对象引用计数会加1。
深拷贝 :内容拷贝,拷贝数据到一块新内存区域,指针指向拷贝的数据区 strong: 浅拷贝,也就是指针引用,很明显的。我们来测试一下 运行结果如下,实际对象是一致的。
用一句简单的话来说就是浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。
浅拷贝:浅拷贝是对object对象的指针拷贝,让指针指向同一块内存地址,“对象永远只有一个,浅拷贝使对象的引用计数器+1。代码如下:可以看出不可变字符串的指针指向了同一地址,并没有重新开辟内存。
不一定。用copy修饰的属性,在setter时,会先调用传入对象的copy方法得到一份拷贝后再retain,但不同的对象调用copy方法,可能是深拷贝也可能是浅拷贝,如果是浅拷贝,则两个指针指向一个内存,旧对象引用计数会加1。
浅拷贝又叫指针拷贝,只拷贝对象指针,不创建新的对象,拷贝对象和原对象都指向同一块内存地址的内容。
copy出来的字符串一定是不可变字符串,如果传入的是可变字符串,会发生深拷贝为不可变字符串,否则为浅拷贝。 mutablecopy,一定是深拷贝,拷贝出来的一定是可变字符串或者数组,即使传入的是不可变字符串或者数组。
到这里全部真相大白了,说明我们的copy修饰的array进行了浅拷贝,我们知道只有当不可变对象使用copy时才是浅拷贝,那我们copy修饰的是一个可变数组,赋值的是一个不可变数组。
分析:strstr2地址相同并且与str3地址不同,NSString的copy是浅拷贝,且copy返回的对象是不可变对象;mutableCopy是深拷贝。
通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝 区别点:深拷贝会创建一个新的内存空间,拷贝的值是一样的,但是内存地址不一样。