Block 心得體會

首先不介紹block的基本概念等,推薦對block的精華闡釋:block一點也不神秘

其次說說我的理解:

1. ?屬性block是可以類比代理來傳值的。 因為block里面含參數(shù)

例如: 設(shè)VC2中有個block的屬性,在VC1中初始化VC2,并拿到VC2的block屬性,定義block,也是就VC1拿到block中的參數(shù)do sth。
在VC2中調(diào)用block并傳參數(shù),并執(zhí)行block即可。
這樣就是VC2把參數(shù)傳給block,然后執(zhí)行block,此時VC1拿到block中的參數(shù),do sth。

這種情況相當(dāng)于:VC1是VC2的代理。block是協(xié)議。
誰要讓代理做事,誰就要有block作為屬性。

2. block作為方法中的參數(shù)。

我的理解為:block就是代碼塊,一段特定的代碼。當(dāng)執(zhí)行這個方法時,方法會在適當(dāng)?shù)臅r候調(diào)用作為參數(shù)的block 。
注意:block里面的參數(shù),是這個方法給的,相當(dāng)于已知條件。方法傳參數(shù)給這個block,你來決定這個block應(yīng)該做哪些事。
關(guān)鍵是:block作為參數(shù),是由外部定義的,因此想干嘛干嘛。再次推薦精華block一點也不神秘

3. block的缺點:如果A要B做某事,就必須B去實現(xiàn)A的block屬性。那么現(xiàn)在最關(guān)鍵的問題是,當(dāng)B要實現(xiàn)A的block時,B必須能夠拿到A。

這才是block最關(guān)鍵的地方?。。?/h1>

4.? 用__WEAK 來解除循環(huán)引用,注意要關(guān)聯(lián)對象啊。
//獲得頭像后顯示出來

__weakmeLeft*weakMe ;

headVC.passImage= ^(UIImage*image){

weakMe.headImageView.image= image;

};

這段白寫了,因為__weakmeLeft*weakMe ;沒有指向任何對象啊,僅僅只是一個空指針啊。
應(yīng)該這樣寫:__weak meLeft*weakMe = me;
__weak typeof(self) weakSelf =self;


5. block用作函數(shù)的參數(shù)


兩種方法:

A> 直接法:直接寫在函數(shù)參數(shù)里面:- (void)abc:(void (^)(NSString *temp))para ;

B>間接法:利用typedef 定義一個block類型 再把它加到函數(shù)參數(shù)里面去

//定義了一個block類型 叫completionBlock

typedef void(^completionBlock)(NSString *content,NSString *ispraised);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容