前言:block雖然經(jīng)常用,代碼中也隨處可見,但是不一定每個(gè)人都能夠準(zhǔn)確定義并使用,所以再看了一篇博客后,手癢 就順手花幾分鐘也寫了篇總結(jié)下,如有雷同,您就湊合著看??。之后會(huì)從底層來總結(jié)下block的實(shí)現(xiàn)原理以及相關(guān)的問題。
1、block作為變量
定義:返回值類型 (^block名)(參數(shù)類型)= ^返回值類型(參數(shù)){};
示例:
UIImageView * (^testBlok)(UIImageView *) = ^UIImageView *(UIImageView *ima) {
return [UIImageView new];
};
testBlok([UIImageView new]);
2、block作為屬性
定義:@property (nonatomic,copy) 返回值類型(^block名)(參數(shù)類型)
示例:
@property (nonatomic, copy) UIImageView *(^testBlock)(UIImageView *);
使用:
self.testBlock = ^UIImageView *(UIImageView *aa) {
return [UIImageView new];
};
3、block作為函數(shù)聲明的形參
定義:- (void) 函數(shù)名:(返回值類型 (^) (參數(shù)類型)) {
}
示例:
- (void)testBlockWith:(UIImageView * (^)(UIImageView *imag) )testParamBlock {
if(testParamBlock) {
UIImageView *image = nil;
UIImageView *resultImageView = testParamBlock(image);
}
}
4、block作為函數(shù)實(shí)參
定義:[函數(shù)名:^返回值類型 (參數(shù)) { … }];
示例:
[self testBlockWith:^UIImageView *(UIImageView *imag) {
}]
5、使用typedef來定義
typedef 返回值類型(^block名)(參數(shù)類型);
使用:block名 xxxx = ^返回值類型(參數(shù)){…}