• 关于Block的学习总结(个人总结帖)


    之前写过陆陆续续写过一些关于block的东西~但是都是太罗嗦和繁琐,所以今天写一篇总结性的帖子

    1.如何声明一个block

    block声明有两个形式,这个很重要,比较容易混搅不清  

    第一个是直接声明block变量   

    int (^ bBlock)(int a,int b)    bBlock是函数名字,其他的时声明的形式,不懂的网上查

    第二个是作为参数去声明   这个和直接声明block变量是不一样的

    (void)testF: bool (^)(int a,int b)  bBlock ;      bool (^)(int a,int b)  bBlock是参数block的声明

    以上就是两中方式的block声明 不懂的可以留言。也可以发我的邮箱  abelchenhanqing@163.com  

     这样的话,block就差不多了,但是遗留下了一个非常重要的问题,我也是才发现的 直接摘抄别人的博客,因为他写的很清楚

    在block内中,使用self或者类的成员变量,会导致self的引用计数被加1,引起循环引用,导致无法释放当前的self

    mMatchHead是我自定义的一个在VC中贴入的view,用了2个block来进行回调。

    在withMinuteFinish:这个block中,出现了2个问题,导致循环引用。

    第一个就是一眼看见的self,block中直接使用self是不对的。

    第二个是,使用了currentScore,这个成员变量,即使不加self.xx,也会导致self引用计数被加1.

    所以,解决方法是,

    用bself的__block变量来代替。请对比上线两张图。self 和currentScore的改变。

    至于这个博文写的第二种方法,我觉得用处不大,就不添加了,可以自己去看

    http://hi.baidu.com/apple_xingpppp/item/8debb830970c136a7d034b72

  • 相关阅读:
    Linux命令之more
    Linux命令之sort
    STM32启动模式
    poll调用深入解析
    STM32 控制步进电机 28BYJ-48
    NEC协议
    家用宽带的上传和下载速度
    Ubuntu14.04更新源
    波特率和比特率【串口为例】
    CentOS: make menuconfig error: curses.h: No such file or directory
  • 原文地址:https://www.cnblogs.com/AbelChen1991/p/3835938.html
Copyright © 2020-2023  润新知