@weakify和@strongify

本文详细介绍了Objective-C中@weakify和@strongify这两个宏的作用和实现原理,它们用于解决block引起的循环引用问题。通过宏展开的分析,揭示了这两个关键字如何在编译时转换为弱引用和强引用,帮助理解函数响应式编程框架ReactiveCocoa中的内存管理策略。
摘要由CSDN通过智能技术生成


提到OC中的block,它像函数指针,当然了,我们知道OC其实都是结构体,所以也就是结构体指针了,我们暂不讨论LLVM的Clang前端是如何转换OC代码的。


一般来说,引入ARC后,出现内存泄露的情况少很多了,很容易出现的地方还是在于使用block造成的循环引用,即block内捕获了外部实例变量,为了保证block内部变量一直存在,默认对其进行了强引用,如果在这个变量的强引用链上,也引用着该block,那么好了,这些内存就无法被收回了。


解决方案比较简单,如同使用代理一样,其中一方弱引用另一方即可,于是,我们常做的是,在栈上使用临时变量,弱引用那个可能强引用着block的变量,然后在block体内使用这个临时变量,即可打破此强引用循环。这里设及了两个关键字__weak __strong(默认是strong的),在MRC的时候,也有这个问题,那时使用__block来解决,现在MRC过时了,这个也不再提。


我估计大家都用过或者至少也听过,有个FRP(函数响应式编程)的框架ReactiveCocoa Framework.

那我们来看看RAC中的@weakify和@strongify是怎么玩的。

这俩其实就是宏,但我想大家和我一样一开始就觉得这玩意儿前面咋有个@,于是看了看宏定义,差点就喷了

我们展开@weakify

#define weakify(...) \

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值