博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARC的strong/weak/unsafe_unretain的区别
阅读量:4624 次
发布时间:2019-06-09

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

strong,weak和unsafe_unretain都是用来描述属性的存储特性的。

下面通过实例来介绍一下他们的区别:

strong:

@property (nonatomic, strong) NSString* string1;@property (nonatomic, strong) NSString* string2;self.string1 = @"string1";self.string2 = self.string1;self.string1 = nil;NSLog(@"string 2 = %@",self.string2);

显示结果: string 2 = string1;

strong类似于retain

当self.string1= @"string1"时,引用计数+1

当self.string2 = self.string1时,引用计数+1

self.string1 = nil,引用计数-1,但是由于引用计数!=0,所以存放@"string1"的地址并没有释放掉其中的值。

 

weak:

@property (nonatomic, strong) NSString* string1;@property (nonatomic, weak) NSString* string2;self.string1 = @"string1";self.string2 = self.string1;self.string1 = nil;NSLog(@"string 2 = %@",self.string2);

显示结果:string2 = (null);

self.string1 和self.string2指向同一个地址,当self.string1 = nil时,存放字符串string1的内存被释放掉,由于self.string2是weak,所以它让self.string2指向nil。

 

unsafe_unretained:

@property (nonatomic, strong) NSString* string1;@property (nonatomic, unsafe_unretained) NSString* string2;self.string1 = @"string1";self.string2 = self.string1;self.string1 = nil;NSLog(@"string 2 = %@",self.string2);

这将导致crash,这正是weak和unsafe_unretained的区别,当释放掉内存后,weak会让它指向nil,但是unsafe_unretained并不会做任何额外的处理,所以self.string2成了野指针。

转载于:https://www.cnblogs.com/neilliang/p/3459519.html

你可能感兴趣的文章
如何依靠代码提高网络性能
查看>>
Zookeeper要安装在奇数个节点,但是为什么?
查看>>
discuz 微社区安装记录
查看>>
[BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
查看>>
配置的热更新
查看>>
MySQL事务的开启与提交,autocommit自动提交功能
查看>>
PriorityQueue
查看>>
CODEVS1403 新三国争霸
查看>>
iOS 环信离线推送
查看>>
WPFTookit Chart 高级进阶
查看>>
雷云Razer Synapse2.0使用测评 -第二次作业
查看>>
django上传文件
查看>>
CVPR2013-papers
查看>>
PHP之时间函数
查看>>
Python open()完整参数
查看>>
django里面DTL使用for循环时,获取当前循环次数使用{{forloop.counter}}
查看>>
Java基础——Java集合(二)
查看>>
详解如何让Android UI设计性能更高效
查看>>
使用KNN算法对鸢尾花数据集进行分类处理
查看>>
java排序-按照实体的多种属性值进行排序(ComparableComparator/ComparatorChain)
查看>>