關於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

相關文章
相關標籤/搜索