簡(jiǎn)述
- 定義Block,就相當(dāng)于定義了一個(gè)函數(shù)。但是Block與函數(shù)之間還是有區(qū)別,函數(shù)必須在方法外面定義,而Block變量可以定義在方法內(nèi)部
- 對(duì)于Block,其實(shí)也相當(dāng)于代理,在本類的Block就相當(dāng)于類自己服從某個(gè)協(xié)議,然后讓自己代理自己去做某個(gè)事情。
在項(xiàng)目中,對(duì)Block的總結(jié):
- Block可以定義在方法內(nèi)部,也可以定義在方法外部
- 在類中,定義一個(gè)Blcok變量,就相當(dāng)于定義一個(gè)函數(shù)
- 只有調(diào)用Block時(shí)候,才會(huì)執(zhí)行Block函數(shù)體{}內(nèi)的代碼
Block使用環(huán)境:
- 作為一個(gè)本地變量(As a local variable)
returnType(^blockName)(parameterTypes) = ^returnType(parameters) {};
- 作為@property(As a property)
@property(nonatomic, copy, nullability) returnType(^blockName)(parameterTypes);
- 作為一個(gè)方法參數(shù)(As a method parameter)
- (void)someMethodThatTakesABlock:(returnType(^nullability)(parameterTypes))blockName;
- 作為方法參數(shù)的時(shí)候被調(diào)用(As an argument to a method call)
[someObject someMethodThatTakesABlock:^returnType(parameters){ ... }];
5.使用typedef來定義block(As a typedef)
typedef returnType(^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) { ... };