一、定義block
有返回值、有參數:返回類型 ^(blockName)(參數) = ^返回類型(參數列表){///代碼 };
無返回值、有參數:void ^(blockName)(參數) = ^(參數列表){///代碼 };
無返回值、無參數: void (^blockName)() = ^ { /// 代碼實現; };
上面這么多,也記不住:
速記代碼快:inlineBlock ,編譯器會提示:(根據需要刪減就好了);
二、block引用外部變量
在定義block時,如果使用了外部變量,block內部會默認對外部變量做一次copy;
默認情況下,不允許在block內部修改外部變量的值;
在外部變量聲明時,使用__block修飾符,則可以在block內部修改外部變量的值;
三、數組的遍歷&排序;
遍歷:enumerateObjectsUsingBlock:
所有的參數都已經準備到位,可以直接使用
效率比for高,官方推薦使用;
舉例:懶加載
enumerateObjectsUsingBlock遍歷:
[tempArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL*_Nonnull stop) {
NSDictionary dict = (NSDictionary)obj; Heros hero = [HerosherosWithDict:dict];
[ArrMaddObject:hero];
}];
for—IN遍歷:
for (NSDictionarydict in tempArray) { Heros *heros = [HerosherosWithDict:dict]; [ArrM addObject:heros];
}
排序:sortedArrayUsingComparator: