iOS 中的block异常
来源:互联网 发布:知乎日报api接口 编辑:程序博客网 时间:2024/06/07 01:07
转自:iOS 知识小集
我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常【32位下的结果,如果是64位,则address=0x10】。如图1,这个异常表示程序在试图读取内存地址0xc的信息时出错。
在定义一个block时,编译器会在栈上创建一个结构体,类似于图2的结构体。
block就是指向这个结构体的指针。其中的invoke就是指向具体实现的函数指针。当block被调用时,程序最终会跳转到这个函数指针指向的代码区。而当block为nil时,程序就会试图去读取0xc地址的信息,而这个地址什么都不会有(duff address),于是抛出一个segmentation fault。在32位系统下,之所以是0xc,是因为invoke前面的三个成员变量的大小正好是12。
所以我们在使用block时,应该首先去判断block是否为空。一种比较优雅的写法是:
!block ?: block()
0 0
- iOS 中的block异常
- ios中的block
- ios中的block
- IOS中的block
- iOS中的 Block
- iOS中的Block
- IOS中的block
- ios中的block
- iOS中的block全面分析
- IOS中的Block的使用
- iOS中的代理和Block
- IOS中的Block在C++中的运用
- IOS中的Block在C++中的运用
- iOS中的block(block编程官方文档翻译)
- iOS中的block和retain cycle (经典)
- IOS中的block和retain cycle
- IOS中的block和retain cycle
- IOS中的block和retain cycle (经典)
- mongodb数据库的备份与导入
- studio之安装之后应有的设置
- 欢迎使用CSDN-markdown编辑器
- jQuery实现全选,反选,全不选
- javaWEB总结(6):ServletRequest
- iOS 中的block异常
- java 前端与后端联动中文字符编码问题
- ARM家族的介绍(三星)
- quartz使用记录
- Linux Note
- Python学习03:序列
- CLR via C# Reading Notes(1)
- 安卓Andriod使用入门(六)【动态GridView控件】
- 如何找出标有"App Store 精华","Essentials"的所有软件?