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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论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地址为文字常量区那么就不难解释这个问题了。

以上是关于论NSString和NSMutableString 属性声明中copy/retain区别的主要内容,如果未能解决你的问题,请参考以下文章

从 self 创建 NSMutableString 时出现 NSString+Extension 警告

探讨NSString和NSMutableString的内存问题以及copy和MutableCopy两个方法

iOS基础-NSString及NSMutableString剖析

OC第二节 —— NSString和NSMutableString

NSString NSMutableString copy mutableCopy retain weak strong

不可变字符串 NSString与可变字符串 NSMutableString