博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
声明 NSString 类型的属性,到底用 strong 还是 copy ?
阅读量:7126 次
发布时间:2019-06-28

本文共 879 字,大约阅读时间需要 2 分钟。

按理说,这都 9102 年了,还讨论这种问题,实在不太合适。可是最近在一些技术群里,却因这个问题炸开了锅,双方各执一词,谁也说服不了谁。那么,声明 NSString 类型的属性,到底用 strong 还是 copy 呢?我们看看下面这个故事:

小张写了个库,里面有这样一段代码:

有一天,小王用到了这个库。

小王:小张啊,你这个库有问题。

小张:什么问题啊?

小王:你把 name 属性声明成 strong 了,应该用 copy 的![偷笑]

小张:为什么应该用 copy 啊?

小王:你看这段代码,我修改了 mStr 的值, 但是 tom.name 的值也发生了改变!

小张:恩,是改变了。这样有什么问题呢?

小王:还看不出问题吗!我是不希望 tom.name 的值改变的,但现在却改变了!

小张:是你自己修改的啊。如果你不希望它的值改变,为什么要修改它呢?

小王:你把 name 属性声明成 copy 不就不会改变了吗!

小张:可我怎么知道你要不要改变呢?这个值要不要改变是你控制的啊!我在库的内部只做读取操作,并没有做修改操作。

小王:总之现在出了问题,这就是你的问题!

小张:你自己创建的可变对象,然后你自己把它的值改变了,为什么是我的问题啊?

小王:你的意思是我甩锅?

一场大战......

这时,小李走了过来,了解情况后

小李:小王啊,你的代码为什么要这么写啊?

小王:为什么不能这么写?

小李:作为程序员,我们一定要清楚自己的代码发生了什么!你这段代码,从逻辑层面讲,类似于下面这样

小王:这怎么一样呢?一个重新赋值,一个没有!

小李:重新赋值是将指针指向了新的内存空间,而你修改可变对象 mStr 的内容是直接更改原有内存空间的内容,都是修改内容,只是方式不一样而已。最重要的是,这块内存是你(调用方)申请的,本着“谁申请,谁管理”的原则,这块内存的内容是否修改也应该是你(调用方)来管理的。

感慨:遇事自己思考,反对教条主义、本本主义。

转载于:https://juejin.im/post/5c78f8e151882502900d12a5

你可能感兴趣的文章
Javascript数组小结
查看>>
我的友情链接
查看>>
2019年学习博文分享
查看>>
用python实现九九乘法表
查看>>
Mindscape WebWorkbench 支持Visual Studio 2012 最新破解
查看>>
大型网站技术架构(四)网站的高性能架构
查看>>
Log4j 1使用教程
查看>>
详解haproxy
查看>>
资深老师给小学生家长的建议
查看>>
MyBatis学习总结(14)——Mybatis使用技巧总结
查看>>
Windows server 2012 /2008从Windows Server Core 模式服务器转换为完全安装(图形模式)...
查看>>
<org manual>翻译--3.5.9 高级特性
查看>>
awk && sed (1)====积累取ip以及sed 查找替换
查看>>
SQL 内链接Inner Join和外连接Outer Join
查看>>
常用HTML正则表达式
查看>>
Tomcat,JDK,MySQL 官方历史版本下载链接
查看>>
Linux lsof命令详解
查看>>
我是如何破解你的WINDOWS密码的 ?(1)
查看>>
SQL Server: Top 10 Secrets of a SQL Server Expert
查看>>
loop循环
查看>>