NSString 使用 copy、strong
// 首先定义2个属性
@property (nonatomic, strong) NSString *stStr;
@property (nonatomic, copy) NSString *coStr; // 测试
- (void)_strong_copy {
NSMutableString *mutableStr = [NSMutableString stringWithFormat:@"abc"]; self.stStr = mutableStr;
self.coStr = mutableStr; NSLog(@"mutableStr:%p, %p", mutableStr, &mutableStr);
NSLog(@"strongStr :%p, %p", _stStr, &_stStr);
NSLog(@"copyStr :%p,%p", _coStr, &_coStr); NSLog(@"\n\n"); [mutableStr appendString:@"de"];
NSLog(@"mutableStr:%p", mutableStr);
NSLog(@"retainStr :%@", _stStr);
NSLog(@"copyStr :%@", _coStr);
}
控制器Log:
-- ::20.117 Demo_OC[:] mutableStr:0x7fece3c13860, 0x7fff56bf8cd8
-- ::20.117 Demo_OC[:] strongStr :0x7fece3c13860, 0x7fece3e8d428
-- ::20.118 Demo_OC[:] copyStr :0xa000000006362613,0x7fece3e8d430 -- ::20.118 Demo_OC[:] mutableStr:0x7fece3c13860
-- ::20.118 Demo_OC[:] retainStr :abcde
-- ::20.118 Demo_OC[:] copyStr :abc
通过日志我们可以分析:
1、mutableStr 被修改时,strong修饰的字符串值发生了变化;copy修饰的字符串值未发生变化。
结论:strong修饰的字符串仅仅是浅拷贝,本身会随着mutableStr改变而改变;而copy修改的字符串是深拷贝,不会随着mutableStr改变而改变。
2、使用copy修饰的字符串更安全一些,可以保证我们的值不会随着mutableStr的改变而改变。
NSString 使用 copy、strong的更多相关文章
- iOS 浅谈:深.浅拷贝与copy.strong
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyStri ...
- 【转】iOS 浅谈:深.浅拷贝与copy.strong
深.浅拷贝 copy mutableCopy NSString 1 2 3 4 5 6 NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSStri ...
- ios 内存管理与property copy strong weak assign
- (void)fun{ NSString* str = [[NSString alloc] initWithString:@"string"]; NSLog(@"% ...
- 何时使用copy,strong,weak,assign关键字 定义属性
现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained ...
- NSString NSMutableString copy mutableCopy retain weak strong整合
copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import ...
- NSString copy && strong
http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):stro ...
- @property中的copy.strong.weak总结
1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" ...
- assign,copy,strong,weak,nonatomic的理解
举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一段 ...
- ios copy/strong/weak..使用总结
总结 关于属性的这些选项的学习,做一下总结: 所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全. NSString:通常都使用copy,以得到新的内存分配,而不只是原 ...
随机推荐
- 洛谷P3455 [POI2007]ZAP-Queries(莫比乌斯反演)
传送门 设$$f(k)=\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)=k]$$ $$g(n)=\sum_{n|k}f(k)=\lfloor\frac{a}{n}\rflo ...
- python 之 函数 内置函数
5.15 内置函数 方法 含义 备注 abs(-1) 求绝对值 1 all ([1,'a',True]) 列表中所有元素的布尔值为真,最终结果才为真 True all ('') 传给all的可迭代对象 ...
- jqeury实现全选和反选
注意:对于input获取属性不能用attr(),只能用prop().不然出现undefined. 第一版: <!DOCTYPE html> <html lang="en&q ...
- [TCP/IP]OSI七层模型和TCP/IP四层模型
OSI參考模型 在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式.修改或分享.為此,ISO(國際標準組織)發展出一套OSI參考模型(O ...
- 安卓第四次作业——简单校园二手交易APP
一.项目团队 团队成员 姓名:汤文涛 学号:1600802129 班级:计算机164班 博客地址:https://www.cnblogs.com/taotao01/ 姓名:杨圣豪 学号:1600802 ...
- 059 Spiral Matrix II 旋转打印矩阵 II
给出正整数 n,生成正方形矩阵,矩阵元素为 1 到 n2 ,元素按顺时针顺序螺旋排列.例如,给定正整数 n = 3,应返回如下矩阵:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6 ...
- C# 序列化与反序列化json
与合作伙伴讨论问题,说到的c++与c#数据的转换调用,正好就说到了序列化与反序列化,同样也可用于不同语言间的调用,做了基础示例,作以下整理: using System.Data; using Syst ...
- C# 实现Tree,包含parentId和children
1.先定义一个类型 public class Node { [JsonProperty(PropertyName = "id", NullValueHandling = NullV ...
- mysql查看各个表的大小
information_schema 数据库,在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引 ...
- A. Arya and Bran
A. Arya and Bran time limit per test 1 second memory limit per test 256 megabytes input standard inp ...