簡介
Block 是C語言級的語法也是一個(gè)運(yùn)行時(shí)特性淹魄。它和C語言的標(biāo)準(zhǔn)函數(shù)很相似,但是在有可執(zhí)行的代碼塊的基礎(chǔ)上它還有將變量保存到棧或者堆上的能力艳馒。因此Block持有了一組“狀態(tài)值”(即前面說的變量)來確保執(zhí)行的結(jié)果。
語法
block的用法比較多樣员寇,下面根據(jù)具體的用法都來看一下怎么樣聲明
As a?local variable:
returnType(^blockName)(parameterTypes) = ^returnType(parameters) {...};
As a?property:
@property (nonatomic, copy)returnType(^blockName)(parameterTypes);
As a?method parameter:
-(void)someMethodThatTakesABlock:(returnType(^)(parameterTypes))blockName;
As an?argument to a method call:?
[someObject someMethodThatTakesABlock:^returnType(parameters) {...}];
As a?typedef:
typedefreturnType(^TypeName)(parameterTypes);
TypeNameblockName = ^returnType(parameters) {...};
上面給出了Block不同身份時(shí)的不同聲明方式弄慰,當(dāng)然這是返回值和參數(shù)都有的情況,如果沒有的話還可以簡寫蝶锋。
特點(diǎn)和用途
block由于下面兩個(gè)特點(diǎn)很適合作為回調(diào)
1.調(diào)用函數(shù)時(shí)就可以書寫函數(shù)執(zhí)行完之后要執(zhí)行的代碼
2.能訪問本地變量(這點(diǎn)非常值得注意)