前言 相信大部分见过 @weakify 和 @strongify 的开发者都会喜欢上这两个宏.但是很多人只知道它的强大威力,却没有意识到在特定环境下的危险性. 本文将通过代码测试的方式告诉读者,如何正确地使用这两个的宏. @weakify 和 @strongify 本文意在说明其危险性,所以不会全面的讲解这两个宏.如果您对其该兴趣,请参考其它作者的文章或者自行查看源码. 这两个宏的定义如下: EXTScope.h#L45-L47 #define weakify(...) \ rac_keywor…
来源:酷酷的哀殿 链接:http://www.jianshu.com/p/d8035216b257 前言 相信大部分见过 @weakify 和 @strongify 的开发者都会喜欢上这两个宏.但是很多人只知道它的强大威力,却没有意识到在特定环境下的危险性. 本文将通过代码测试的方式告诉读者,如何正确地使用这两个的宏. @weakify 和 @strongify 本文意在说明其危险性,所以不会全面的讲解这两个宏.如果您对其该兴趣,请参考其它作者的文章或者自行查看源码. 这两个宏的定义如下: EX…
前言 在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理.然而实际使用Block过程中,还是会遇到一些问题,比如Retain Circle的问题. 目录 1.Retain Circle的由来 2.__weak.__strong的实现原理 3.weakSelf.strongSelf的用途 4.@weakify.@strongify实现原理 一. Retain Circle的由来 循环引用的问题相信大家都很理解了,这里还是简单的提一下. 当A对象里面强引用了B对象,B对…
深入研究Block捕获外部变量和__block实现原理 EOCNetworkFetcher.h typedef void (^EOCNetworkFetcherCompletionHandler)(NSData *data); @interface EOCNetworkFetcher : NSObject @property (nonatomic, strong, readonly) NSURL *url; - (id)initWithURL:(NSURL *)url; - (void)star…
深入研究Block捕获外部变量和__block实现原理 前言 在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理.然而实际使用Block过程中,还是会遇到一些问题,比如Retain Circle的问题. 目录 1.Retain Circle的由来 2.weak.strong的实现原理 3.weakSelf.strongSelf的用途 4.@weakify.@strongify实现原理 一. Retain Circle的由来 循环引用的问题相信大家都很理解了,这里还是…
前言 使用RAC的时候我们常会看到这两个宏@weakify(self).@strongify(self),用来防止使用block时出现引用闭环. 今天看YYKit的时候,看到里面也写了类似的宏,还是来谈谈这两个宏是怎么实现的吧. 正文 ## 宏定义代码 由于YYKit中的weakify.strongify相对比较简单,所以只剖析RAC(2.5)中的weakify.strongify. #define weakify(...) rac_keywordify metamacro_foreach_cx…
0.很长的前言 1.问题 2.RAC是怎么解决的 2.weakify.strongify的定义 预备知识 一层层展开weakify 3.RAC装逼宏 metamacro_argcount 的定义 metamacro_foreach_cxt 的定义 RAC的宏装逼过程总结 0.很长的前言 在block语句块中,如果需引用self,而self对象中又持有block对象,就会造成循环引用循环引用(retain cycle),导致内存泄露,比如以下代码     self.block = ^{      …
为了解决 Block 造成的循环引用,iOS 开发过程中常常使用 @weakify 与 @strongify 来解决这个问题.下面就来看下 @weakify 与 @strongify 的实现原理. 准备知识 宏参数(Arguments)的扩展 可变参数宏 宏定义中的重复副作用 宏定义里面为什么要加括号? Block对变量的引用 @weakify 和 @strongify 的实现原理就是宏展开,阅读上面的准备知识可以更好的理解下面宏展开的过程. @weakify.@strongify 替换后的结果…
昨天组内同学在使用php父子进程模式的时候遇到了一个比较诡异的问题 简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复现示例代码: testFork.php <?php require_once("./PowerSpawn.php"); $ps = new Forkutil_PowerSpawn(); $ps->maxChildren = 10 ; $ps->timeLimit = 86…
欢迎评论& 3461896724@qq.com互动 可以在我的首页看更多 #1先送大家几个号:(密码都是 MLdlight2020)请区分大小写(可以直接复制) 写过一篇 免费验证码接收网站&不停开小号方法 提到了邮箱&手机号 的方法 基本 1分钟可以一个号 简单的说:手机号推荐https://smsreceivefree.com/ 邮箱推荐:http://5-mail.com/ 欢迎 下面都是用户名 cnblogs.com:(blogs) 好处:可以互相点赞:评论:为所欲为 :开…