block使用小结、在arc中使用block、如何防止循环引用
引言 使用 block 已 经有一段时间了,感觉自己了解的还行,但是几天前看到 CocoaChina 上一个关于 block 的小 测试 主题 : 【小 测试】你真的知道 blocks 在 Objective-C 中是怎么工作的 吗? ,发现竟然做错了几道 , 才知道自己想当然的理解是 错误的,所以抽时间学习了下,并且通过一些测试代码进行测试,产生这篇博客。 Block 简介( copy 一段) Block 作 为 C 语言的扩展,并不是高新技术,和其他语言的闭包或 lambda 表 达式是一回事。需要注意的是由于 Objective-C 在 iOS 中不支持 GC 机制,使用 Block 必 须自己管理内存,而内存管理正是使用 Block 坑最多的地方, 错误的内存管理 要么 导致 return cycle 内存泄漏要么内存被提前 释放导致 crash 。 Block 的使用很像函数指 针,不过与函数最大的不同是: Block 可以 访问函数以外、词法作用域以内的外部变量的值。换句话说, Block 不 仅 实现函数的功能,还能携带函数的执行环境。 可以 这样理解, Block 其 实包含两个部分内容 Block 执行的代码,这是在编译的时候已经生成好的; 一个包含 Block 执行时需要的所有外部变量值 的数据 结构。 Block 将使用到的、作用域附近到的 变量的值