简介
Block是一个代码块,因其捕获变量、代码传递等特性而使得它比delegate更具功能和灵活性,而被广泛使用。
Block变量的声明、调用
Block变量的声明格式为: 返回值类型(^名称)(参数);
1、在类之前定义
typedef void (^netRequestResultBlock)(id data, BOOL success);
@interface YBNetWorkManager : NSObject
@property (nonatomic, copy) netRequestResultBlock resultBlock;
@end
@implementation YBNetWorkManager
- (void)networkRequestFinish {
if (_resultBlock) {
_resultBlock(data, YES);
}
}
@end
接着你可以在另一个类中实现你想要的操作
@implementation ViewController
- (void)netRequest {
__weak __typeof(self) weakSelf = self;
[YBNetWorkManager shareInstance].resultBlock = ^(id data, BOOL success){
weakSelf.nextBtn.userInteractionEnabled = YES;
if (success) {
NSLog(@"%@", data);
}
};
[[YBNetWorkManager shareInstance] startRequest];
}
@end
2、在一个方法中定义
- (void)test {
__block int j = 0;
void(^myBlock)(NSString *, NSUInteger) = ^(NSString *str, NSUInteger i){
j++;
NSLog(@"%@, %lu",str, i);
};
myBlock(@"abc", 1);
}