前言

在不久前看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的一种写法相关推荐

  1. Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...

  2. JavaScript 立即执行函数的两种写法

    (function(str){console.log(str+'欢迎你~');})('行步至春深');(function(str) {console.log(str+'欢迎你~');}('行路易知难' ...

  3. WindowsServer2012史记7-茴香豆的五种写法和四种”显示计算机”的方法

    消失的"计算机"? [这周九叔工作比较忙,还有其他琐事缠身,因此SystemCenter2012SP1系列的发布稍慢,抱歉了各位.] 众所周知,WindowsServer2012和 ...

  4. Android代码规范----按钮单击事件的四种写法

    [前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...

  5. php编写星期几,PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; ...

  6. 全面理解Javascript闭包和闭包的几种写法及用途【转】

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  7. Android按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  8. 全面理解Javascript闭包和闭包的几种写法及用途

     一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  9. SWT事件的四种写法

    一.匿名内部类写法     在创建SWT中的HelloWorld插件项目中就是用的这种写法,再次复制如下: button.addSelectionListener(new SelectionAdapt ...

最新文章

  1. 漫画 | TCP,一个悲伤的故事
  2. (十)Centos之文件搜索命令find
  3. Java笔试题之《流行的框架与新技术》
  4. ABAP知识:LIKE LINE OF 和LIKE TABLE OF
  5. LBFT跨链共识机制
  6. Set的常用实现类HashSet和TreeSet
  7. AWS elastic load balancer里的监听器certificate设置
  8. 华为云服务器密码修改,华为云鲲鹏云服务器安装MySQL 5.7.30
  9. Java ObjectStreamClass lookup()方法与示例
  10. python 生成图片_python生成带有表格的图片
  11. 数据看穿一生:前半生赚钱养娃,后半生赚钱买命
  12. oralce修改密码教程
  13. sql高级语法之窗口函数调用
  14. 题解 CF1391B 【Fix You】
  15. 在Java中编码为Base64
  16. 在Python中使用try-except-else是否是一种好习惯?
  17. Android View框架总结(四)View布局流程之Measure
  18. mysql regexp instr_MySQL 正则表达式:regexp_instr 函数
  19. python将注释写入xml_向xml文档添加注释
  20. Navicat15注册时报错 rsa public key not find

热门文章

  1. python与excel结合-Python和Excel终于可以
  2. strftime和strptime使用
  3. 题目1154:Jungle Roads
  4. Django的下载及命令
  5. Eclipse如何导入maven项目,以及配置maven
  6. scrapy-redis组件写分布式爬虫实战
  7. python -- IO多路复用
  8. OpenCV调整彩色图像的饱和度和亮度
  9. Sublime Text开发Quick-Cocos2d-x环境搭建(Mac)
  10. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...