博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
strong vs copy
阅读量:7209 次
发布时间:2019-06-29

本文共 1391 字,大约阅读时间需要 4 分钟。

一、前言
          在这里,我通过实例去介绍strong和copy的区别(%p打印出来对象的地址)
     ViewController.h           
#import 
@interface ViewController : UIViewController@property(nonatomic,strong) NSString *name;@endViewController.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:0x7967f4c02015-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:0x78deb9b02015-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打印出对象的地址。

转载地址:http://syrum.baihongyu.com/

你可能感兴趣的文章
Java™ 教程(控制流语句)
查看>>
【刷算法】LeetCode- 两数之和
查看>>
Python 中的 10 个常见安全漏洞,以及如何避免(上)
查看>>
GMTC 大前端时代前端监控的最佳实践
查看>>
类文件结构
查看>>
[Python教程] 一只乌龟其实也很酷 (1、动起来)
查看>>
手动实现bind函数(附MDN提供的Polyfill方案解析)
查看>>
八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线
查看>>
HTTP/2 技术调研和性能分析
查看>>
ES6 javascript 实用开发技巧
查看>>
如何在新版的gitbook上写自己的书
查看>>
Java知识点总结(Java容器-ArrayList)
查看>>
Shared Event-loop for Same-Origin Windows(译)
查看>>
写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
查看>>
使用stanford nlp进行依存句法分析
查看>>
JavaScript Promise查缺补漏
查看>>
你还不知“dubbo”是个什么东西吗???
查看>>
Gin实践 番外 Golang交叉编译
查看>>
【401天】跃迁之路——程序员高效学习方法论探索系列(实验阶段158-2018.03.13)...
查看>>
浅谈面试中常考的两种经典布局——圣杯与双飞翼
查看>>