首页 > 代码库 > block 心得
block 心得
block
(如有错误,或者有一些建议 , 请联系我 愿意听取建议)
- block 比函数灵活 可以在程序里面设定 也可以在程序外面设定
- block 主要用于封装程序 到适应的时候调用 (有参数 和 无参数)
- block 重命名 typedef int (^MyBlock) (int,int) 其中 int (^MyBlock)表示返回值参数以及 重命名之后 block 名字 后面是俩形参
- 起初 没有多线程时 整个程序中只有一条线程
- 在block 代码块中如果用 self 强引用 会出现 循环引用的问题 , 导致 内存不能被释放 所以在block 代码块外面 引用弱指针 是为了内存能彻底释放
在 block 代码中 一般不要用到外面东西
如果在 block 代码中必须用到外面的东西 (block 中有代理设置为self)
最后 会产生强引用 结果无法释放
结决方法 (防止block循环引用) : 先把它弄出来声明为弱指针
- __unsafe_unretainsd typeof(self) selfVc = self;
- __weak typeof(self) selfVc = self;
- __weak (当前控制器 *) selfVc = self;
上面三种方法 都要在block上面写 意思是:
- 声明一下 下面的self 就是这个控制器 并且变为弱指针
但这样同时存在一个问题 __weak弱引用随时可能被销毁
- 但在多线程中 子线程运行完毕后就会被释放,所以在子线程的block 代码快中可以采用self强引用 保证了能执行每一次的块代码 最后直接销毁
只有self直接强引用block,才会出现循环引用 (内存不能释放)
block的管理以及线程的创建和销毁是由队列负责的,直接在block中使用self没有关系!
block的管理以及线程的创建和销毁是由队列负责的,直接在block中使用self没有关系!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。