block为我们提供了一个非常便捷的方法去实现各种传值以及回调
合理的使用block可以减少代码量以及更加优雅的实现功能
现做个小整理如下:
#pragma mark About Block
//block的原型:
NSString *(^myBlock)(int);
//上面的代码声明了一个block(^)原型,名字叫做myBlock,包含一个int型的参数,返回值为NSString类型的指针。
//block的定义:
myBlock=^(int paramA){
return [NSString stringWithFormat:@"Passed number:%d",paramA];
};
myBlock(2);
#pragma mark . Block Create And Usage
//基本使用 返回值 UIImage object
UIImage *oldImage=[UIImage imageNamed:@"avatar"];
UIImage *(^myImageBlock)(UIImage*)=^(UIImage *image){
return image;
};
UIImage *newImage=myImageBlock(oldImage);
//基本使用 无返回值
NSString *string=@"";
void (^logBlock)(NSString *)=^(NSString *paramStr){
NSLog(@"logBlock log:%@",paramStr);
};
logBlock(string);
//含有block参数的函数 比较常见的类型,如网络请求中的successfulBlock
//方法
- (void)turnNumberWithNumberA:(NSInteger)a NumberB:(NSInteger)b andMyBlock:(void(^)(int aa,int bb))myBlock{
int c=[[NSNumber numberWithInteger:a]intValue];
int d=[[NSNumber numberWithInteger:b]intValue];
myBlock(c,d);
}
//调用
[self turnNumberWithNumberA:1 NumberB:2 andMyBlock:^(int aa, int bb) {
NSLog(@"aa is %d",aa);
NSLog(@"bb is %d",bb);
}];
//block在两个视图的传值 Apush到B B消失时将textfield的值传回A
//
typedef void (^ReturnTextBlock)(NSString *showText);//给block重命名,方便调用
@interface B : UIViewController
@property (nonatomic, copy) ReturnTextBlock returnTextBlock;//声明一个block属性
- (void)returnText:(ReturnTextBlock)block;//加上后方便第A视图书写该block方法
@end
//
- (void)returnText:(ReturnTextBlock)block {//block的实现方法
= block;
}
- (void)viewWillDisappear:(BOOL)animated {
if ( != nil) {
();//视图将要消失时候调用
}
}
//需要push的时候调用
B *bVC = [[B alloc]init];
[bVC returnText:^(NSString *showText) {//定义B视图后调用block
= showText;
}];