OC中的block基础知识2

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        //返回值类型 (^block变量名)(参数列表) = ^(参数列表){函数体};

        //block变量名 = ^(参数列表){函数体};

        

        //===============不同类型的block================

        //1.没有返回值没有参数的block

        void (^block1)(void) = ^(){

        

            NSLog(@"没有返回值没有参数的block");

        };

        

        //block调用的时候才会去执行block存储的代码段

        block1();

        

        //2.没有返回值有参数的block

        //参数列表:参数类型1 参数名1, 参数类型2 参数名2...

        //声明block的时候,参数列表中的参数名可以省略,参数类型不能省略; block变量赋值的时候,代码段中的参数列表中,参数名和参数类型都不能省略

        void (^block2)(int) = ^(int a){

            //a的作用域在block代码块中 (block的参数都是在block代码段中)

            NSLog(@"没有返回值有参数的block%d", a);

            

        };

        //有参数的block的调用

        block2(10);

        

        

        //有两个参数的block

        void (^block3)(NSString *,NSString *) = ^(NSString * str1, NSString * str2){

        

            NSLog(@"%@ %@", str1, str2);

        };

        

        block3(@"hello", @"world");

        

        //3.有返回值的block

        BOOL (^block4)() = ^(){

            

            int  a = arc4random() % 21;

            

            if (a > 10) {

                

                return YES;

            }

            

            return NO;

        };

        

        //有返回值的block的调用

        BOOL ret = block4();

        if (ret) {

            NSLog(@"大于10");

        }else{

        

            NSLog(@"小于等于10");

        }

        

        

        //============block中外部变量的使用==========

        //对于block5来说,变量b是一个外部变量

        //__block修饰的变量可以在block代码段中被改变

        int b = 100;

        __block NSString * str = @"aaa";

        

        

        void (^block5)() =  ^(){

        

//            int c = b;

            //block代码段中可以直接使用外部变量

            NSLog(@"%d, %@", b, str);

            

            //外部变量在block中默认是只读的

//            b = 200;

            str = @"ccc";

        };

        

        

        

        block5();

        

        b = 200;

        

        block5();

        

        

        

    }

    return 0;

}


转载于:https://my.oschina.net/luhoney/blog/649498

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值