簡介
Block 是C語言級的語法也是一個運行時特性。它和C語言的標準函數(shù)很相似,但是在有可執(zhí)行的代碼塊的基礎上它還有將變量保存到棧或者堆上的能力。因此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ù)都有的情況,如果沒有的話還可以簡寫。
特點和用途
block由于下面兩個特點很適合作為回調(diào)
1.調(diào)用函數(shù)時就可以書寫函數(shù)執(zhí)行完之后要執(zhí)行的代碼
2.能訪問本地變量(這點非常值得注意)