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

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

一、前言
          在这里,我通过实例去介绍strong和copy的区别(%p打印出来对象的地址)
     ViewController.h           
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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);
}
        运行结果是:
1
2
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时,
1
@property
(
nonatomic
,
copy
NSString 
*name;
        运行结果是:
1
2
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打印出对象的地址。

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

你可能感兴趣的文章
oracle启动报错:ORA-00845: MEMORY_TARGET not supported on this system
查看>>
Go方法
查看>>
Dapper丶DapperExtention,以及AbpDapper之间的关系,
查看>>
搞IT的同学们,你们在哪个等级__那些年发过的帖子
查看>>
且谈语音搜索
查看>>
MySQL数据库导入导出常用命令
查看>>
低版本Samba无法挂载
查看>>
Telegraf+Influxdb+Grafana构建监控平台
查看>>
使用excel 展现数据库内容
查看>>
C#方法拓展
查看>>
19、其他文件编程函数(目录文件、链接文件、临时文件)
查看>>
Android 画渐变的背景
查看>>
DataTable与实体类互相转换
查看>>
[Usaco2002 Feb]Rebuilding Roads重建道路
查看>>
关于javascript中apply()和call()方法的区别
查看>>
SpringAOP实战应用
查看>>
JVM快速入门
查看>>
poj 3311 Hie with the Pie (floyd+状压dp)
查看>>
HDU 6140 Hybrid Crystals
查看>>
【查漏补缺】普通类中获取有注解的类
查看>>