ios开发copy字符串 ios字符串为什么用copy

iOS中assign,copy,retain之间的区别以及weak和strong的区别

1、也就是说,retain 是指针拷贝,copy 是内容拷贝。strong,weak 用来修饰属性。

成都创新互联是一家专业提供湖口企业网站建设,专注与成都网站制作、网站建设、外贸网站建设H5响应式网站、小程序制作等业务。10年已为湖口众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

2、copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。

3、copy与strong类似。不同之处是strong的复制是多个指针指向同一个地址,而copy的复制每次会在内存中拷贝一份对象,指针指向不同地址。copy一般用在修饰有可变对应类型的不可变对象上,如NSString, NSArray, NSDictionary。

IOS中Retain和Copy的区别

1、同,这个对象的 retain 值+1 assign 地址还是0x1111,内容也还是“ABC”。也就是说,retain 是指针拷贝,copy 是内容拷贝。strong,weak 用来修饰属性。

2、也就是说,retain是指针拷贝,copy是内容拷贝。

3、retain:引用计数器+1,指向同一地址。结果和浅拷贝一样,仅仅是使得对象的引用计数器自增copy:对不可变对象等同与retain,指针拷贝,引用计数器+1。对可变对象执行深拷贝,等同mutableCopy,内容拷贝。

iOS深拷贝与浅拷贝(附demo)

学习资料 首先iOS拷贝可以区分为 深拷贝 和 浅拷贝 。 浅拷贝 :拷贝了对象的指针,可以理解为给一条狗加了一条绳子。 深拷贝 :直接拷贝对象到另外一块内存地址中,可以理解为新买了一条狗。

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

用copy修饰的属性,在setter时,会先调用传入对象的copy方法得到一份拷贝后再retain,但不同的对象调用copy方法,可能是深拷贝也可能是浅拷贝,如果是浅拷贝,则两个指针指向一个内存,旧对象引用计数会加1。

深拷贝 :内容拷贝,拷贝数据到一块新内存区域,指针指向拷贝的数据区 strong: 浅拷贝,也就是指针引用,很明显的。我们来测试一下 运行结果如下,实际对象是一致的。


文章标题:ios开发copy字符串 ios字符串为什么用copy
标题路径:http://myzitong.com/article/dgdcees.html