weakself的一种写法
前言
在不久前看AFNetworking的源码时候发现了这么一句:
// 不知道这行代码的使用场景的同学你该去自习看看ARC的注意事项和Block的使用了
// AFNetworking的写法__weak __typeof(&*self)weakSelf = self;
// 我之前一直这么写的__weak __typeof(self) weakSelf = self;
// 或者这么写__weak XxxViewController *weakSelf = self;
// 或者这么写__weak id weakSelf = self;
当时也没注意为什么要写成&*这种样子… 今天再想起来, 搜了一圈, 终于让我找到原因了…
正文
其实以上的4种写法都是对的
AFNetworking里面不写成以上这行代码的原因是因为 typeof(self)
会被解析成 XxxViewController *const __strong
(假如你的self是XxxViewController的话), 这样的话就就会报错…(没有老版本, 没有验证, 不过看网上的结论应该是这样了)
不过, 如果你写成了__typeof(self)也没什么问题… 那是因为在LLVM3.1之后已经不会出现以上的情况了… ( via )
总结
TODO: ARC的文档值得仔细看看 http://clang.llvm.org/docs/AutomaticReferenceCounting.html
之前推荐的 Multithreading and Memory Management for iOS and OS X 是一本好书
转载于:https://blog.51cto.com/liuyafang/1614042
weakself的一种写法相关推荐
- Javascript闭包和闭包的几种写法及用途
好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途. 一.什么 ...
- JavaScript 立即执行函数的两种写法
(function(str){console.log(str+'欢迎你~');})('行步至春深');(function(str) {console.log(str+'欢迎你~');}('行路易知难' ...
- WindowsServer2012史记7-茴香豆的五种写法和四种”显示计算机”的方法
消失的"计算机"? [这周九叔工作比较忙,还有其他琐事缠身,因此SystemCenter2012SP1系列的发布稍慢,抱歉了各位.] 众所周知,WindowsServer2012和 ...
- Android代码规范----按钮单击事件的四种写法
[前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...
- php编写星期几,PHP实现今天是星期几的几种写法
复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; ...
- 全面理解Javascript闭包和闭包的几种写法及用途【转】
一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...
- Android按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- 全面理解Javascript闭包和闭包的几种写法及用途
一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...
- SWT事件的四种写法
一.匿名内部类写法 在创建SWT中的HelloWorld插件项目中就是用的这种写法,再次复制如下: button.addSelectionListener(new SelectionAdapt ...
最新文章
- 漫画 | TCP,一个悲伤的故事
- (十)Centos之文件搜索命令find
- Java笔试题之《流行的框架与新技术》
- ABAP知识:LIKE LINE OF 和LIKE TABLE OF
- LBFT跨链共识机制
- Set的常用实现类HashSet和TreeSet
- AWS elastic load balancer里的监听器certificate设置
- 华为云服务器密码修改,华为云鲲鹏云服务器安装MySQL 5.7.30
- Java ObjectStreamClass lookup()方法与示例
- python 生成图片_python生成带有表格的图片
- 数据看穿一生:前半生赚钱养娃,后半生赚钱买命
- oralce修改密码教程
- sql高级语法之窗口函数调用
- 题解 CF1391B 【Fix You】
- 在Java中编码为Base64
- 在Python中使用try-except-else是否是一种好习惯?
- Android View框架总结(四)View布局流程之Measure
- mysql regexp instr_MySQL 正则表达式:regexp_instr 函数
- python将注释写入xml_向xml文档添加注释
- Navicat15注册时报错 rsa public key not find