ios开发之NSString用strong还是用copy?
代码如下:
1,声明
@property(nonatomic,strong)NSString *firstName; @property(nonatomic,copy)NSString *secondName;
2,代码
NSMutableString *str1 = [NSMutableString stringWithFormat:@"李博"];
self.firstName = str1;
NSLog(@"使用strong第一次得到的名字:%@",self.firstName); [str1 appendString:@"爵"];
NSLog(@"使用strong第二次得到的名字:%@",self.firstName); NSMutableString *str2 = [NSMutableString stringWithFormat:@"李博"];
self.secondName = str2;
NSLog(@"使用copy第一次得到的名字:%@",self.secondName); [str2 appendString:@"爵"];
NSLog(@"使用copy第二次得到的名字:%@",self.secondName);
3,打印
2018-04-22 23:10:10.543151+0800 hgl-test[2709:61971] 使用strong第一次得到的名字:李博
2018-04-22 23:10:10.543351+0800 hgl-test[2709:61971] 使用strong第二次得到的名字:李博爵
2018-04-22 23:10:10.543503+0800 hgl-test[2709:61971] 使用copy第一次得到的名字:李博
2018-04-22 23:10:10.543652+0800 hgl-test[2709:61971] 使用copy第二次得到的名字:李博
从上面的例子我们可以看到:
我们没有修改firstname的情况下,firstname却被修改了,就好像一个人的名字怎么能没有经过自己同意就被修改呢?我们的初衷是只想修改str1,但是firstname却被意外的修改了,而这就是我们使用strong所不想看到的,它会破坏程序的封装性。使用strong后firstname和str1只想的是同一片内容,所以修改其中一个值后两个值都变了
反之,使用copy的话,str2通过copy得到一个新的对象赋值给secondname,这样我们再修改str2就跟secondname没有关系了,只有队secondname进行赋值才能改变它的值,这样就保证了程序的封装性。
其实就是能更加深入理解深拷贝和浅拷贝的含义!
ios开发之NSString用strong还是用copy?的更多相关文章
- iOS开发之MVVM在项目中的应用
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之WKWebView简单使用
iOS开发之WKWebView简单使用 iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- 李洪强iOS开发之Block和协议
李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任 ...
- iOS 开发之 GCD 不同场景使用
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- IOS开发之ZBarReaderView的使用
IOS开发之ZBarReaderView的使用 HOMEABOUTGUESTBOOKCATEGORIESTAGSLINKSSUBSCRIBE 当开发IOS程序中需要用到二维码识别功能的时候,zbar这 ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
随机推荐
- mha切换脚本可用的
#!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ( $command, $ss ...
- nano 命令 linux
用途说明 nano是一个字符终端的文本编辑器,有点像DOS下的editor程序.它比vi/vim要简单得多,比较适合Linux初学者使用.某些Linux发行版的默认编辑器就是nano.(nano - ...
- Java Set List Map
对JAVA的集合的理解是想对于数组 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java. ...
- 关于Unity中的刚体和碰撞器的相关用法(二)
在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...
- Selenium常用操作汇总二——如何把一个元素拖放到另一个元素里面(转)
Q群里有时候会有人问,selenium webdriver怎么实现把一个元素拖放到另一个元素里面.这一节总一下元素的拖放. 下面这个页面是一个演示拖放元素的页面,你可以把左右页面中的条目拖放到右边的 ...
- c语言for循环等语句详解
循环结构有: . goto语句和if语句构成循环 .while语句 .do-while语句 .for语句 goto语句 goto语句是一种无条件转移语句, 与Basic中的goto语句相似.goto语 ...
- (转)最简单的基于FFmpeg的内存读写的例子:内存播放器
ffmpeg内存播放解码 目录(?)[+] ===================================================== 最简单的基于FFmpeg的内存读写的例子系列文章 ...
- ckeditor4.2.1常用配置
常用的配置信息都放在根目录的config.js文件中,一些常用的配置项如下: 1.界面语言 //语言 config.language = 'zh-cn'; 2.字体添加中文 //字体 config.f ...
- 几个免费IP地址查询API接口
转:http://blog.csdn.net/ishxiao/article/details/52670242 -------------------------------------------- ...
- 机器学习——使用Apriori算法进行关联分析
从大规模的数据集中寻找隐含关系被称作为关联分析(association analysis)或者关联规则学习(association rule learning). Apriori算法 优点:易编码实现 ...