OC中的block基礎知識


//  1.函數指針專門用來指向C語言的函數的指針(專門用來存儲函數名的地址)函數

//  2.選擇器是用來存儲OC中方法,(存的也是方法名)spa

//  3.block也是專門用來存儲方法 (存的是函數體-實現函數功能的代碼段).net


//指針


#import <Foundation/Foundation.h>code



void func1(){orm

    NSLog(@"函數1");get

}it


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

    @autoreleasepool {class

        //===========1.回顧函數指針========

        // 返回值類型(*函數指針名)(參數列表)

        //聲明一個能夠指向返回值是空,沒有參數的函數的函數指針

        void (*pfunc)() = func1;

        

        //用這個函數指針存儲函數地址

        pfunc = func1;

        

        //經過函數指針調用函數

        pfunc();

        

        //函數指針的做用:將函數做爲參數來傳遞

        

        //=========2.block基礎============

        //"block""指針"同樣,只是對一種類型的描述;經過表達式前面"*"來判斷表達式是指針。咱們是經過表達式前面的"^"來判斷表達式是block。指針專門用來存儲地址,block專門用來存儲代碼塊。

        //block存儲代碼塊的方式和函數指針存儲函數的方式很像。

        //想要存儲什麼樣的函數的代碼塊,你就須要聲明什麼樣的block去存儲

        

        //a.block的聲明

        //返回值類型 (^block變量名)(參數列表);

        void (^block1)();      //聲明瞭一個block變量block1;這個block變量可以存儲是沒有返回值,沒有參數的函數的函數體

        

        //b.block的初始化

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

        void (^block2)() = ^(){

        

            //寫函數功能的實現的代碼段(函數體)

            NSLog(@"這個一個代碼段");

            

        };

        

        //c.賦值

        block1 = ^(){

        

            NSLog(@"這第二個代碼段");

        };

        

        //d.block的調用

        //block中存儲的代碼段,在調用block調用的時候纔會執行

        //block調用和C語言的函數調用同樣

        block1();

        block2();

          

        

    }

    return 0;

}

相關文章
相關標籤/搜索