论NSString和NSMutableString 属性声明中copy/retain区别

 

直接上代码

1.先声明要测试的属性

2.NSMutableString进行赋值

----我们打印出oldMStr地址和在不同赋值之后它的引用计数,看看到底有什么变化。最后我们打出这4个属性的具体的值和地址,看看地址和值有什么变化

-----从打印的结果中我们可以看出retain属性值的地址和原oldMStr地址相同,再看看oldMStr的引用计数,说明retain属性值的为浅复制。再看看copy属性值的情况,地址都改变了同时oldMStr的引用计数没法发生变化,当oldMStr值发生变化后,copy属性值的属性 值没有发生变化,由此可以断定copy为深复制

3.NSString进行赋值

-----用NSString进行赋值,所有属性的值为第一次赋值的值。再看看oldStr的地址,引用计数。不难发现oldStr的地址在赋值的时候发生改变,变到文字常量区去了。再看看引用计数-1.再联系到oldStr地址为文字常量区那么就不难解释这个问题了。

posted @ 2017-12-06 17:35  搬砖工1号  阅读(207)  评论(0编辑  收藏  举报