论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地址为文字常量区那么就不难解释这个问题了。

时间: 2024-10-16 08:09:02

论NSString和NSMutableString 属性声明中copy/retain区别的相关文章

OC语法--问NSString属性声明中的copy和retain具体区别

问NSString属性声明中的copy和retain具体区别 copy是将源对象release然后新对象copy在付给源对象 retain是将源对象release然后新对象retain再付给源对象 根本区别就是对象进行深拷贝时copy要开辟新的存储空间,浅拷贝时效果相同.引用计数方面retain是源对象引用计数加1,copy当 是浅复制时源对象引用计数加1,深复制时源对象引用计数不变,新对象引用计数加1.    NSString *str = @"hello"; // copy原模原样

Objective C assign&copy & retain区别

什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 retain是指针拷贝,copy是内容拷贝 比如一个Car对象,地址为0×1111 Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化 retain到另外一个

NSString属性声明中的copy和retain区别

规范上NSString做属性都是写成copy的,理论上应该是复制了字符串而不是单纯的增加引用计数,其实问题只会出现在把NSMutableString赋值给NSString的时候. 首先做以下几个变量声明: @property (retain, nonatomic) NSString *retainStr; @property (copy, nonatomic)   NSString *copyStr; @property (retain, nonatomic) NSMutableString *

为啥NSString的属性要用copy而不用retain

之前学习生活中,知道NSString的属性要用copy而不用retain,但是不知道为啥,这两天我研究了一下,然后终于明白了. 具体原因是因为用copy比用retain安全,当是NSString的时候,其实用copy和retain都行,当用NSMutableString,那么就要用copy,NSMutableString的值不会被修改,而用retain的时候,NSMutableString的值会被修改,具体情况,可以看下面的代码: #import <Foundation/Foundation.h

NSString 属性为啥用copy 不用strong

copy不能修改,strong可以修改,防止字符串被意外修改.demo: ------------------code 你要的 demo------------------ @property (nonatomic, copy) NSString * copystring; @property (nonatomic, strong) NSString *strongString; NSMutableString *string = [NSMutableString stringWithStrin

NSString和NSMutableString常用方法+NSArray常用代码 (转)

常见的NSString和NSMutableString方法: NSString方法: [plain] view plaincopy +(id) stringWithContentsOfFile:path encoding:enc error:err 创建一个新字符串并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中错误 +(id) stringWithContentsOfURL:url encoding:enc error:err 创建一个新的字符串,并将其设置为

Objective-C: 字符串NSString与NSMutableString

字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就与其他我们常用的编程语言不尽相同.  这里总结一下字符串NSString与NSMutableString. 一. NSString NSString代表字符序列不可变的字符串,NSString的功能非常强大,OC的字符串处理比C语言的饿字符串简单.易用得多. 这里我们通过一个具体的例子来进行分析.

iOS基础-NSString及NSMutableString剖析

一.NSString头文件 NSString : NSObject 实现协议: NSCopying/NSMutableCopying/NSSecureCoding 类别: //扩展类别 NSString (NSStringExtensionMethods) //此API是用来检测给定原始数据的字符串编码 NSString (NSStringEncodingDetection) NSMutableString : NSString 类别: //可以实现子类的原始replaceCharactersI

Foundation框架-NSString和NSMutableString

可变与不可变的字符串 --1-- Foundation框架介绍 1.1 框架介绍 --2-- NSString 2.1 NSString介绍及使用 2.2 NSString创建方式  2.3 从文件中读取/存储字符串 2.4 字符串的比较 2.5 前后缀检查及搜索 2.6 字符串的截取和替换 2.7 获取字符串的每个字符 2.8 字符串和其他数据类型转换 2.9 NSString去除空格  --3-- NSMutableString 3.1 NSMutableString 基本概念 3.2 字符