Block使用介绍(-)

来源:互联网 发布:大嘴猴天鹅绒知乎 编辑:程序博客网 时间:2024/06/06 03:15

block作为iOS开发的常用技术之一需要深入的了解一下,现在总结一下。不废话直接上代码
Viewcontroller里面的代码:
/** block的使用 *  block原型   NSString* (^myBlock)(int); *  原型中声明一个参数为int 返回值为NSString* 的叫myBlock的block(^)原型 *  定义myBlock如下 *  myBlock = ^(int num){ *      //block body *  } *  由于block数据类型的语法会降低整个代码的阅读性,所以常用typedef来定义block类型:例子在 NextViewcontroller里面 */- (void)viewDidLoad {    [super viewDidLoad];        //1、定义无参无返回值的Block    //返回值类型    blockName      传入参数  block body     void       (^printBlock)    () =     ^(){        printf("block \n");    };    printBlock();    printBlock(1);    //2、定义一个myBlock的block,参数、返回值为int    int mutiplier = 7;    int (^myBlock)(int) = ^(int num){        return num * mutiplier;    };    NSLog(@"%d",myBlock(3));    printNumBlock(5);    //4、__block关键字的使用  当需要改变block body 外部 变量的值时需要在声明前加__Block    __block int x = 100;    void (^sumAandYBlock)(int) = ^(int y){        x += y;        NSLog(@"x + y = %d",x);    };    sumAandYBlock(22);    [self initSubViews];}//3、定义一个有参数没有返回值的blockvoid (^printNumBlock)(int) = ^(int num){    NSLog(@"pringtNumBlock:%d",num);};/** block注解 * 1、定义的block可以作为函数也可以作为变量 * 2、block可以定义在函数体内也可以在函数体外 * 3、声明block时并不会执行内部的代码,只有调用block时才会执行block体内的代码 * 4、定义在函数体外的block相当于全局变量 */-(void)initSubViews{    label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 100)];    [self.view addSubview:label];    label.center = CGPointMake(kScreenWidth * 0.5, kScreenHeight * 0.5);    label.backgroundColor = [UIColor redColor];    next = [[NextViewController alloc]init];    __block ViewController* blockSelf = self;    next.NextViewControllerBlock = ^(NSString* text){        [blockSelf setLableText:text];    };    next.nextValueBlock = ^(NSInteger num){        NSString* str = [NSString stringWithFormat:@"%ld",num];        [blockSelf setLableText:str];    };    [self.navigationController pushViewController:next animated:YES];}-(void)setLableText:(NSString* )text{    label.text = text;}-(void)passTextValue:(NSString* )string{    label.text = string;}
NextViewcontroller里面的代码:

.h

#import <UIKit/UIKit.h>typedef void (^NextValueBlock) (NSInteger num);@protocol NextVCDelagate <NSObject>-(void)passTextValue:(NSString* )string;@end@interface NextViewController : UIViewController@property(nonatomic,assign)id <NextVCDelagate>delegate;@property(nonatomic,copy) void (^NextViewControllerBlock)(NSString* text);@property(nonatomic,strong) NextValueBlock nextValueBlock;@end

.m

-(void)viewDidDisappear:(BOOL)animated{    [_delegate passTextValue:@"第二个页面 传值啦!"];    if (self.NextViewControllerBlock) {        self.NextViewControllerBlock(@"00000000000");    }    if (self.nextValueBlock) {        self.nextValueBlock(4);    }}



0 0
原创粉丝点击