*block代碼塊閉包(一個(gè)區(qū)域)與C語言函數(shù)類似
*block具有反向傳值吕晌、回調(diào)的功能
回調(diào):執(zhí)行完畢之后返回再去執(zhí)行
反向傳值:回調(diào)的時(shí)候給它一個(gè)值
*它分為聲明實(shí)現(xiàn)和調(diào)用兩部分
聲明:聲明有這么一個(gè)類型的block (會(huì)執(zhí)行這一步)
實(shí)現(xiàn):只要不主動(dòng)調(diào)用就不會(huì)執(zhí)行
調(diào)用:當(dāng)調(diào)用的時(shí)候會(huì)返回去執(zhí)行實(shí)現(xiàn)的部分
*block可以當(dāng)參數(shù)也可以當(dāng)變量使用
1、block聲明和實(shí)現(xiàn)
2昧旨、分析回調(diào)反向傳值
3、當(dāng)做變量使用
4成玫、當(dāng)做參數(shù)使用
5绿渣、當(dāng)做屬性使用解決block的內(nèi)存循環(huán)引用
6、讓block代替代理
#pragma mark---block的公式---
1根灯、聲明實(shí)現(xiàn)寫到一塊的公式
*返回值類型(^block名字)(參數(shù)列表:參數(shù)類型參數(shù)名)= ^(參數(shù)列表:參數(shù)類型參數(shù)名){
實(shí)現(xiàn)代碼
(如果有返回值需要return返回值類型的值)
}
*調(diào)用:
block名字(參數(shù));
2径缅、聲明實(shí)現(xiàn)分開的公式
(1)聲明
返回值類型(^block名字)(參數(shù)列表);
(2)實(shí)現(xiàn)
block名字= ^(參數(shù)列表){
實(shí)現(xiàn)的內(nèi)容(如果有返回值return)
}
(3)調(diào)用
block名字(實(shí)參);
****先實(shí)現(xiàn)后調(diào)用不能未寫實(shí)現(xiàn)就調(diào)用
@()轉(zhuǎn)成NSNumber類型字典不能存int類型
#pragma mark---__block---
*__block:修飾詞修改block之外變量內(nèi)容的修飾詞
***如果不加__block就不允許在block方法里面修改外部變量的值就算是賦值得到的也只是修改之前的值
*__weak:修飾詞弱引用用它修飾的變量都是不安全的變量->告訴編譯器可以釋放這個(gè)對象
*變量的名字在棧里面
*修改不是局部變量的值的時(shí)候(涉及到對象)使用__weak修飾把不能銷毀的對象用一個(gè)臨時(shí)變量替換
*修改是局部變量的值的時(shí)候用__block
#pragma mark---block高級部分----
把block作為參數(shù)-全局變量
{
void(^block)(NSString*text);
}
*把block當(dāng)做方法的參數(shù)傳遞
聲明:
方法的公式:- (返回值類型)方法名:(參數(shù))形參
block聲明:返回值類型(^block名字)(參數(shù)列表);
block當(dāng)參數(shù):- (返回值類型)方法名:(block參數(shù))形參
最終形態(tài):- (返回值類型)方法名:(返回值類型(^)(參數(shù)列表))block名字
調(diào)用:在方法中去調(diào)用block
- (返回值類型)方法名:(返回值類型(^)(參數(shù)列表))block名字{
block名字(實(shí)參);
}
實(shí)現(xiàn):調(diào)用方法的時(shí)候系統(tǒng)自動(dòng)提示實(shí)現(xiàn)代碼
在.h文件使用typedef用一個(gè)名字替代整個(gè)block的聲明
以后resultBlock代表整個(gè)block
typedefvoid(^resultBlock)(NSDictionary *info);