weakify和strongify
来源:互联网 发布:编程猫 是个怎样的公司 编辑:程序博客网 时间:2024/06/11 20:53
最近回顾了一下自己曾经写过的代码,发现在用Block的地方大量的运用到了weakSelf和strongSelf。还记得自己曾经在使用Block的时候,明明定义了weakSelf,由于block中代码很多,导致不小心有个地方忘记使用weakSelf而造成循环使用,于是,就寻思着有啥好办法可以简化weakSelf和strongSelf,避免再犯错误呢?答案就是weakify和strongify。趁此机会学习并记录一下,也顺便改正一下自己曾经写过的代码。
一个简单的宏定义:
// weakify#define weakify(var) __weak __typeof(var) weak_##var = var;// strongify#define strongify(var) \_Pragma("clang diagnostic push") \_Pragma("clang diagnostic ignored \"-Wshadow\"") \__strong __typeof(var) var = weak_##var; \_Pragma("clang diagnostic pop")
举例:
Model *model = [Model new];weakify(self);model.dataChanged = ^(NSString *title) { strongify(self); self.label.text = title;};self.model = model;
相关文章引用:
https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h,原始代码,实现比较复杂,但根本原理相同。
http://holko.pl/2015/05/31/weakify-strongify/ 本文就是借鉴的此文。
http://stackoverflow.com/questions/28305356/ios-proper-use-of-weakifyself-and-strongifyself 这里很好的解释了strongify的工作。
其它参考:
http://www.samirchen.com/ios-autorelease-pool/ 介绍了##连接符
http://www.cnblogs.com/alexshi/archive/2012/03/09/2388453.html 一篇介绍autoreleasspool的好文章。
0 0
- weakify和strongify
- @weakify和@strongify
- @weakify, @strongify
- @weakify, @strongify
- @weakify, @strongify
- MRC/ARC通用的weakify和strongify
- @weakify, @strongify 详解
- @weakify, @strongify 使用
- weakify strongify 实现
- Reactive Cocoa中@weakify和@strongify实现分析
- 文MRC/ARC通用的weakify和strongify
- 剖析RAC中的@weakify、@strongify
- weakify/strongify 大法,的简单宏,抄至于YYKit
- ObjC的Block中使用weakSelf/strongSelf @weakify/@strongify
- ObjC的Block中使用weakSelf/strongSelf @weakify/@strongify
- ObjC的Block中使用weakSelf/strongSelf @weakify/@strongify
- @strongify以及@weakify宏命令的的使用(1)
- ObjC的Block中使用weakSelf/strongSelf @weakify/@strongify
- Html5 手机wap开发、微信开发、APP开发的优缺点-创业者必知
- 关于一个音频播放器在工作时,打开另一个播放器或者进来电话之类的处理
- codeforces-611D-New Year and Ancient Prophecy【lcp+dp】【好题】
- android.os.DeadObjectException memory near r0: 异常处理
- 阿里云PPTP VPN配置
- weakify和strongify
- 机器学习的贝叶斯方法
- Java WebService 简单实例
- CentOS6.5下编译安装MySQL 5.6.16【详细教程】
- 算法提高 排列数
- JAVA学习之多线程
- 第二次上机实践项目-项目2-本月有几天?
- 【NOI2008】BZOJ1061志愿者招募
- canvas模拟简易钟表