strong,weak小记

在Objective-C逐渐进入ARC时代后,我们已经不用手动去retain,release来对对象进行管理了,但是我们需要面对strong,weak这两个关键字来对对象的持有关系进行确定。

其实strong和weak的意义和使用都十分简单

1. strong 表示的是从属关系,引用对象持有被引用的对象

2.weak则暗示不具备从属关系

首先我们需要知道,当一个对象只有在它没有从属于任何对象时,它才会被ARC给释放掉。

我们这样来想,假如所有对象之间的持有都是strong的,那么当对象之间的持有关系如图1,那么B,C,D之间相互持有,无法被释放掉,这就形成了内存泄漏。所以,为了解决这个问题,我们将B和D之间的关系改为weak,表明B并不从属于D,那么当A被释放掉时,B也被释放掉,C,D都会被释放掉。这样,就不会内存泄漏了。


图1

 

下面是使用weak的几个常见的情况

1. 在应用程序委托中使用weak

@property(weak, nonatomic) id delegate

2. 在对nib文件的uikit界面组件IBOutlet的引用时

3. 在block中对自身self的引用。因为block对捕捉的变量构成强引用。

__block typeof(self) weakself=self;
[self testBlock:^{
  [weakself doSomething];
}];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值