【iOS开发每日小笔记(五)】实测copy到底是个神马玩意

这篇文章是我的【iOS开发每日小笔记】系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧。该分类的文章,内容涉及的知识点可能是很简单的、或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验、代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下。其实,90%的作用是帮助自己回顾、记忆、复习。如果看官觉得太easy,太碎片,则可以有两个选择:1,移步【iOS探究】分类,对那里的文章进行斧正;2,在本文的评论里狠狠吐槽,再关掉页面!感谢!

上个月月底我写了一篇博文http://www.cnblogs.com/pigpigDD/p/3880866.html 总结了我理解的ARC,strong、weak的一些用法。今天花了一点时间研究了一下copy这个属性。

网上看了很多博客,大家都在讨论的是copy的工作原理,“几种变量(容器非容器、可变非可变)的两种copy(copy、mutableCopy)”到底会返回什么变量。如:

http://www.cnblogs.com/ludashi/p/3894151.html

http://www.gowhich.com/blog/472

http://blog.segmentfault.com/channe/1190000000604331?page=1#c-1190000000604331-1050000000607780

当然他们写的都很卖力,用了一大堆demo代码来说明问题,也分析了自定义类怎么实现NSCopying copyWithZone等等都很全面。但是我的这篇文章想借题发挥分享四点我的想法:

一:几篇博文中存在一些不合理的地方,比如用NSString常量来测retainCount值(MRC模式),NSString常量(NSString *string = @"XX"),包括[NSString stringWithString:]以及 [[NSString alloc] initWithString:]这几个返回的都是NSString常量,是保存在内存的“文字常量区”的,不同于用户使用绝大多数alloc init或绝大多数类方法初始化创建的对象,那些对象是创建在堆上的。因此对前者做retainCount是相对没有意义的,你得到的是“-1”;还有一些文章中,对返回值到底是可变还是不可变写的很随意,这也是对网友的误导。

二,很少有文章能说明,什么时候用copy或mutableCopy,为什么要用他们。那么在我看来,1,假如你想用对象A的值创建一个新的不可变对象B,那么请你用copy来修饰B,也就是B = [A copy];2,如果你想用对象C的值创建一个新的可变对象D,那么请你用mutableCopy来修饰D,也就是D = [C mutableCopy];

总结一下:

①:考虑返回结果是否是可变对象:A和C是无所谓可变还是不可变的,而是通过copy/mutableCopy来控制;

②:当修饰词为copy时,考虑返回结果是单纯的引用(内存地址相同)还是全新的创建:A/C如果是可变对象,则为新创建,反之则为引用;

③:当修饰词为mutableCopy时,返回结果都是用原对象的值重新创建的新对象。

三:我也写了一个自己的demo用来言简意赅的探索copy、mutableCopy到底是“神马玩意”,在这里:https://github.com/pigpigdaddy/CopyMutableCopyDemo 读者可通过解注释,来测试。

四:对于自定义类怎么实现NSCopying copyWithZone 以及 如何进行严格意义上的完全深拷贝(数组内的值完全深拷贝),不是本文的讨论内容,请参考:http://www.cnblogs.com/scorpiozj/archive/2011/01/25/1944496.html 。

【iOS开发每日小笔记(五)】实测copy到底是个神马玩意,布布扣,bubuko.com

时间: 2024-12-09 17:47:45

【iOS开发每日小笔记(五)】实测copy到底是个神马玩意的相关文章

【iOS开发每日小笔记(十)】自制带圆框的头像 利用在CALayer设置“寄宿图”

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 在上一篇文章中,我详细地回顾.复习了Core Graphics框架中利用Quartz 2D来绘制各种各样的图形,其实这些绘图就是绘制到了UIView的CALayer层上.这次,受到另一篇博文(http://

【iOS开发每日小笔记(九)】在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习. 一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.正巧自己的上线App Store的小游戏<跑酷好基友>(https://itunes.apple.com/us/app/pao-k

【iOS开发每日小笔记(十二)】仿Facebook登录界面 错误提示抖动 利用CAAnimation设置动画效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 原本以为国庆假期可以有时间看看书,写写博客.实际上大部分时间都被赶场参加婚礼和到处去亲戚家串门吃饭所占用.眼看明天还剩最后一天时间,今天赶紧来更新一篇,也算是没有完全荒废这7天长假吧! Facebook的客

【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 测试组的小伙伴们大显神威,iOS8刚发布,他们就把测试设备急速升级了,然后就是扑面而来的各种bug和他们各种幸灾乐祸的笑.没办法,老老实实修复bug! 来看看今天我遇到的一个问题: 项目中,我将一个简化的H

【iOS开发每日小笔记(四)】iOS 7中如何除去UIAlertView 规避delegate对象销毁后接收消息的crash

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row

从这篇文章开始我将会把每天在开发过程中遇到的,可以用很短的文章.很小的demo演示解释出来的小心得小技巧,分享在[iOS开发每日小笔记]这个分类中.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们会给用户体验.代码效率得到一些提升,记录在这里,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,可以选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论里狠狠吐槽,再关掉页面!感谢! 今天在项目中遇到这样一个小问题:我使用UI

转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

http://www.bubuko.com/infodetail-382485.html 这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 测试组的小伙伴们大显神威,iOS8刚发布,他们就把测试设备急速升级了,然后就是扑面而来的各种bug和他们各种幸灾乐祸

【iOS开发每日小笔记(十三)】使用UIDocumentInteractionController 打开ibooks文档的注意点

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 大约两年多前,我曾尝试自己写一个程序,用来解析Word文档.当时满腔热血,认为只要是把xml各种标签一一对应解析就好了(当时还不知道有CoreText这档子东西).后来发现自己实力不够,在解析了图片.文字.

【iOS开发每日小笔记(三)】利用iOS7 UIKit Dynamics 仿Zaker客户端首页动态效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下(^_^).其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在