首页 > 代码库 > 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没有关系!