block
2016-03-21 21:11
211 查看
block是可以截取自动变量的匿名函数,它是iOS中一种特殊的数据类型。
一般应用于
- 动画
- 多线程
- 集合遍历
- 回调(网络请求)
在将block作为参数传递的一个技巧写法
这样去定义参数时,看起来很麻烦,但是调用test函数时,会自动帮你生成参数,不需要再手动敲,提高了效率。
如果给block传nil,会报错,出现EXC_BAD_ACCESS,因为你给block传nil,它会乱指一块内存所以最好在使用block前判断是否为空
但是,不是这样的,只考虑有__weak的情况下,他持有self的指针,但是不强引用self,所以block只是对weakSelf进行了强引用,
哎呀,还是不理解,不能把自己说服,先说一下对strong的理解,这个是因为strong的是一个局部变量,block执行之后strong就可以释放掉了,但是他保证了在block执行期间这个self不被释放掉。
一般应用于
- 动画
- 多线程
- 集合遍历
- 回调(网络请求)
在将block作为参数传递的一个技巧写法
void test(int (^myBlock) (int num1, double num2, char num3)) { }
这样去定义参数时,看起来很麻烦,但是调用test函数时,会自动帮你生成参数,不需要再手动敲,提高了效率。
用block前判断是否为空
比如这种情况void test(void(^method)()) { method(); //此处报错EXC_BAD_ACCESS } int main() { test(nil); }
如果给block传nil,会报错,出现EXC_BAD_ACCESS,因为你给block传nil,它会乱指一块内存所以最好在使用block前判断是否为空
void test(void(^method)()) { if(method != nil) method(); } int main() { test(nil); }
关于__weak和__strong自己的理解
之前一直不理解这个__strong,用__weak不就是为了解除block对于self的强引用吗,那其实对__weak也不理解,因为weakSelf不也是self吗,你用weakSelf,到时候不也是对self进行了一次强引用了吗。但是,不是这样的,只考虑有__weak的情况下,他持有self的指针,但是不强引用self,所以block只是对weakSelf进行了强引用,
哎呀,还是不理解,不能把自己说服,先说一下对strong的理解,这个是因为strong的是一个局部变量,block执行之后strong就可以释放掉了,但是他保证了在block执行期间这个self不被释放掉。
相关文章推荐
- computer science
- 多线程的那点儿事(之死锁)
- 剑指offer——字符串的排列
- 浅谈MVP架构及开发模式
- Java中“final”关键字
- Elasticsearch——Rest API中的常用用法
- Android 中的文件操作的9个实例
- 微信公众平台自定义菜单
- C语言中的堆排序是什么样子的过程
- 【pyspark】jieba 中文分词
- [NOIp2013] 货车运输
- UVA10714线段上的蚂蚁
- Linux下的时间函数:获取和设置时间的函数
- 统计字符串中字母个数
- Centos下进行磁盘分区的配额功能
- Codeforces 653D Delivery Bears 【二分+最大流】
- 刚刚学会个基础链表
- 局部数组
- Java类的加载顺序
- hdu2588 GCD(欧拉函数)