Block代码块的使用,和注意事项

来源:互联网 发布:怎样解除网络限制 编辑:程序博客网 时间:2024/05/16 01:41
//关于block的使用,    //block的声明  返回值类型 (^block名称)(参数列表)        void (^Block)(void);//声明block    Block = ^(void){    //如果不是现代码块 就调用 block 程序会崩掉    };    Block();//调用block代码块        //block中的 局部变量    // 定义局部变量    int x = 100;    void (^PrintBlock)(void) = ^(void)    {        //x = 300; 尝试对局部变量赋值,程序将会报错                NSLog(@"%d" , x);// 访问局部变量的值是允许的 输出100;    };       x = 200; // 再次将x赋值为200        PrintBlock(); // 调用块    // 定义__block修饰的局部变量    __block int a = 200;    void (^printMy)(void) = ^(void)    {                NSLog(@"%d" , a);// 运行时候访问、获取局部变量的值,此处输出100                a = 300; //尝试对__block局部变量赋值是允许的                NSLog(@"%d" , a); // 此处输出300    };    // 再次将a赋值为100    a = 100;    // 调用块    printMy();    // 由于块修改了__block局部变量的值,因此下面代码输出300    NSLog(@"块执行完后,a的值为:%d" , a);        //有返回值的block   NSString* (^MyBlock) (NSString* string) = ^(NSString* string){           NSLog(@"string:%@",string);//输出 string:requst    return @"response";//返回值           };        NSString* blockStrings =  MyBlock(@"requst");//返回值 赋值给blockStrings    NSLog(@"blockStrings:%@",blockStrings);//输出  blockStrings:response        // 注意: 执行block时 如果重复实现了 block的代码块 , 那么 blcok()在执行时只会跳到最后一个实现的块,也就是说块会被覆盖,并不会,同时执行多个块, 但如果没有实现代码块,那么程序就会崩溃

0 0
原创粉丝点击