美文网首页
底层篇之论关键字copy和strong的使用区分。

底层篇之论关键字copy和strong的使用区分。

作者: 不够果断是种癌 | 来源:发表于2018-06-11 18:34 被阅读64次

由来:最近看了好多比较著名开源框架,突然发现了一个问题,就是大多数著名的框架对于  NSString, NSArray,NSDictionary。属性修饰符用的copy。而楼主对于这一块喜欢用strong,或者retain。于是楼主这里产生了这么一个问题?

为什么这些框架里面不采用strong,或者retain。楼主对于这一块查了很多资料,同时也方便自己对于这块的使用。

这里就涉及到了深复制和浅复制,相信大家在面试的时候都被问过了什么是深复制,什么是浅复制,深复制和浅复制有什么区别。

copy在这里就是浅复制,又名:指针复制。mutableCopy是深复制,又名对象复制。并且如果是对可变对象进行复制都是深复制。由此copy只用来修饰不可变对象比如:NSString,NSArray,NSDictionary。另外block也是用copy修饰。

肯定也有人不知道什么是深复制和浅复制,我这边还是给大家解释一下:

浅复制:只复制指针值而不是实际资源。

深复制:深复制是指不仅复制指针,还复制指针所指向的资源。也就是新产生了一个对象。

深复制和浅复制都有复制2个字,复制的意义何在,就是改变原来的内容,不影响复制的内容。改复制的内容,不影响原来的内容。

而对于为什么使用是为了防止别人修改外界的属性,而不影响最原始的属性。

大家肯定又要问道为什么block要使用copy?

大家肯定知道最开始的时候是没有ARC(内存自动管理)的,都是MRC(手动内存管理)。block最开始是基于MRC的情况下的,是为了防止block用过的变量提前释放了,导致程序over了。我们这边就会使用copy,将bolck放到堆中。但是如果将block放到堆中就会产生一个新问题。也就是将block内部持有对象的时候,百分百会产生循环引用,从而导致内存泄露。我以前的文章针对这个现象就有提到,同时这里也会附上正确的解决方法:《针对内存泄露-开发容易被忽略的例子-by:西瓜》

就此结束。

相关文章

网友评论

      本文标题:底层篇之论关键字copy和strong的使用区分。

      本文链接:https://www.haomeiwen.com/subject/qhvheftx.html