OC中的block基礎知識2

#import <Foundation/Foundation.h>dom


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

    @autoreleasepool {spa

        

        //返回值類型 (^block變量名)(參數列表) = ^(參數列表){函數體};.net

        //block變量名 = ^(參數列表){函數體};orm

        

        //===============不一樣類型的block================作用域

        //1.沒有返回值沒有參數的blockget

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

        

            NSLog(@"沒有返回值沒有參數的block");io

        };class

        

        //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;

}

相關文章
相關標籤/搜索