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,以得到新的内存分配,而不只是原 ...
随机推荐
- 18.使用for循环计算+1-3+5-7+9-11+13...99的结果
j = 1 # -1 num1 = 0 #1-3 for i in range(1,100,2): num1 += j * i # -3 j = j * -1 # 1 print(num1) sum1 ...
- 【ZJOI2007】捉迷藏 小小的总结
2019-01-09 22:56:33 终于终于把这道题目做掉了... 做了两个晚上..不知道为什么自己如此之笨.. 在洛谷上断断续续一共交了24次,感觉自己都要被封号了. 昨天花半个晚上从零开始研究 ...
- Java进程占用内存过高,排查解决方法
最近收到邮件报警,说内存使作率达到84%.如下图: 解决方法: A:可能是代码原因导致的问题: 1.使用命令:top 查看当前进程的状态 2.从上图可以看到PID:916的java进程占用内存较大.定 ...
- MyBatis入门Bug集锦X1
- MySQL事务学习
- eclipse中windows下的preferences左栏没有tomcat?
是因为缺少eclipse for tomcat 插件,到http://www.eclipsetotale.com/tomcatPlugin.html此网站下载,我的eclipse版本是4.4版本的,所 ...
- day5字典作业详解
1.day5题目 1.有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2&q ...
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) A
Bash wants to become a Pokemon master one day. Although he liked a lot of Pokemon, he has always bee ...
- jQuery基础(1)
一.jQuery的介绍 1.为什么要使用jQuery? 在用js写代码时,会遇到一些问题,如下: 1)window.onload 事件有事件覆盖的问题,因此只能写一个事件: 2)代码容错性差: 3)浏 ...
- mybatis pageHelper 分页插件使用
转载大神 https://blog.csdn.net/qq_33624284/article/details/72828977 把插件jar包导入项目(具体上篇有介绍http://blog.csdn. ...