objective-c基礎之block

block基本使用
#import <Foundation/Foundation.h>


int main00() {

//    //block的使用
//    void (^print)(void) = ^(void)
//    {
//        NSLog(@"我正在學習objective C :block");
//    };
//    print();
//    //無返回值無參數
//    
//    double (^sumD)(double,double) = ^(double a,double b)
//    {
//        return a+b;
//    };
//    double sum = sumD(10.4,20.4);
//    NSLog(@"%lf",sum);
//    //有返回值,有參數
//    
//    void (^printStr)(NSString*);
//    printStr = ^(NSString *str){
//        NSLog(@"%@",str);
//    };
//    //無返回值,有參數
//    printStr(@"hahahah");
    
    //注意點
    //1.默認局部變量在block中是可以訪問的,但是不能修改 2.在執行的過程中block是要使用的局部的值,在定義block的時候就寫死了,所以是20,不是45
    
//    int my = 20;
//    void (^print)(void) = ^()
//    {
//        //my = 30;
//        NSLog(@"%d",my);
//    };
//    
//    my = 45;
//    print();
    //解決方法:__block 去修飾這個
    __block int my = 20;
    void (^print2)() = ^()
    {
        NSLog(@"%d",my);
        my = 30;
        NSLog(@"%d",my);
        //my = 40;
    };
    print2();

    
    return 0;
}

block+typedef 複用+回調
<pre name="code" class="objc">#import <Foundation/Foundation.h>

//typedef功能 1.複用block類型   2.使用block做函數參數時使用

typedef void (^FKProcessBlock)(int);

void processArray(int array[],unsigned int len,FKProcessBlock process)
{
    for(int i=0;i<len;i++)
    {
        process(array[i]);
    }
}//回調:你調用別人的函數,在別人的函數中引用你自己的函數,你中有我,我中有你


int main()
{
//    typedef void (^PrintBlock)(NSString *str);
//    
//    PrintBlock print = ^(NSString *info)
//    {
//        NSLog(@"%@",info);
//    };
//    
//    PrintBlock printLoop = ^(NSString *info)
//    {
//        for(int i=0;i<3;i++)
//        {
//            NSLog(@"%@",info);
//        }
//    };
//    
//    print(@"oc ...");
//    printLoop(@"ios");
    int arr[] = {2,4,6};
    processArray(arr, 3, ^(int num)
                 {
                     NSLog(@"%d",num*num);
                 });
    
    
    
    return 0;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章