一、前言
在这里,我通过实例去介绍strong和copy的区别(%p打印出来对象的地址)
ViewController.h           
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property(nonatomic,strong) NSString *name;
@end
ViewController.m- (void)viewDidLoad {[super viewDidLoad];NSMutableString *myName = [NSMutableString stringWithString:@"zhangsan"];self.name = myName;NSLog(@"myName's address:%p",myName);NSLog(@"self.name's address:%p",self.name);
} 

运行结果是:
2015-07-21 16:38:50.911 Test[4369:2323491] myName's address:0x7967f4c0
2015-07-21 16:38:50.912 Test[4369:2323491] self.name's address:0x7967f4c0

而当我们把.h中的strong改成copy时,
@property(nonatomic,copy) NSString *name;

运行结果是:
2015-07-21 16:40:09.938 Test[4394:2330879] myName's address:0x78deb9b0
2015-07-21 16:40:09.938 Test[4394:2330879] self.name's address:0x78dea270

对比可以发现:
当我们使用strong时,myName对象和self.name的地址相同,说明两者指向的是同一个地址空间:0x7967f4c0
        而当我们把.h中name的strong改成copy时,myName和self.name地址不同,说明两者指向的是不同的地址空间。
myName是:0x78deb9b0
self.name是:0x78dea270
这说明:当我们使用copy的时候表示拥有不同的存储空间,存放的是相同的内容。因此如果我们对myName进行修改,self.name是不会受到影响的。

  在ARC情况下,如果源字符串是NSString时,由于字符串不可变,所以不管是strong还是copy属性的对象,都是指向源对象,copy只是进行了浅拷贝。

  而如果源字符串是NSMutableString的话,strong是强引用,只是增加了源字符串的引用计数,而copy则是对源字符串进行了深拷贝,产生了一个新的对象,而且开辟了新的内存空间。此时如果我们修改源字符串的值,那么strong特性的字符串也会跟着修改,而copy的则不变。

* 大多情况下,建议使用copy,因为一般我们将对象声明为NSString时,都不希望它改变。

总结:
这里你应该学到:
1、strong和copy的区别
2、我们可以用%p打印出对象的地址。

strong vs copy相关推荐

  1. strong、copy和mutableCopy详解

    写在前面 关于copy.mutableCopy和strong,一直想好好整理整理,但是因为各种原因搁置了.今天上班时发现老代码中因为这个问题出现了一个特别恶心的大坑,让我下定决心写下这篇博文.如果你认 ...

  2. 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】

    @property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...

  3. iOS strong和copy的区别

    级别: ★☆☆☆☆ 标签:「iOS」「NSString」「strong和copy」 作者: MrLiuQ 在iOS开发中,几乎每天都会遇到NSString属性的声明, 在ARC内存管理机制下, NSS ...

  4. iOS学习笔记-retain/assign/strong/weak/copy/mutablecopy/autorelease区别

    readwrite:是可读可写特性,需要生成getter和setter方法: readonly是之都特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变时候使用: alloc ...

  5. iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别

    依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内 ...

  6. NSString属性什么时候用copy,什么时候用strong?

    我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy.那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢?让我们先来看 ...

  7. NSString属性什么时候用copy,什么时候用strong?【转】

    转自:http://www.cocoachina.com/ios/20150512/11805.html. 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境): ...

  8. @synthesize@dynamic@private,@protected,@publicassign、weak、strong、retain、copy、nonatomic、atomic

    iOS属性修饰关键字 1. @private,@protected,@public,@package详解及使用 @privite:私有的,只有本类(不包括子类)自己拥有 @protected:受保护的 ...

  9. (0087)iOS开发之NSString属性为什么要用copy来修饰?

    这个问题既是一个面试题,也是开发中经常遇到的问题,NSString 属性到底用copy 还是 strong ?其实如果明白的两者的区别也就不会疑惑了,其实都可以,只是如果你不明白两者的实质的区别,有可 ...

最新文章

  1. UICollectionView的使用方法
  2. 爬虫原理与数据抓取----- urllib2:URLError与HTTPError
  3. 一个ThreadLocal和面试官大战30个回合
  4. android系统的测试方法,运行测试  |  Android 开源项目  |  Android Open Source Project...
  5. ios之UIImageView
  6. golang跳转控制语句:goto语句示例
  7. IDEA开发中,类的头位置生成作者时间信息
  8. 测试Maven版本插件自动递增版本号
  9. 流行前沿的暗黑APP主题UI设计素材模板
  10. 《数字图像处理与机器视觉——Visual C++与Matlab实现》——0.1 数字图像
  11. natapp软件使用
  12. perl Data::Dumper和Storable的例子
  13. 8.3 单位矩阵和逆矩阵
  14. 快递取件码生成软件_一种快递柜取件码生成装置及其使用方法与流程
  15. CRC8 CRC16 查表法
  16. 黑视素照度(EML) Equivalent Melanopic Lux 计算工具
  17. mysql 5.166修改字符集_mysql字符集问题
  18. 致即将逝去的大二和写给就要到来的大三
  19. 达梦dsc搭建+dw
  20. js怎么实现对html代码加密解密,JS实现Base64加密解密

热门文章

  1. 为什么工具监测不出内存泄漏
  2. 让QT对话框显示中文
  3. ajax提交数据被截断的问题
  4. Python学习笔记之列表(四)
  5. FTP服务器配置固定IP才能访问
  6. 队列定义、队列的存储结构
  7. SpringCloud创建Config Client通过Eureka访问Config
  8. 阿里巴巴开发公约节选(日常编程较常用的一些)
  9. 技术优点_波纹管内衬管制造技术及优点
  10. CSS深入浅出(三)