关于Block的学习总结(我的总结帖)

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

1.如何声明一个block函数

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

第一个是直接声明block变量   博客

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

第二个是做为参数去声明   这个和直接声明block变量是不同的test

(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