以前寫過陸陸續續寫過一些關於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