IOS程式文法之block的使用掌握

來源:互聯網
上載者:User

標籤:

  在現階IOBlock 是iOS在4.0之後新增的程式文法,嚴格來說block的概念並不算是基礎程式設計的範圍,對初學者來說也不是很容易瞭解,但是在iOS SDK 4.0之後,block幾乎出現在所有新版的API之中,換句話說,如果不瞭解block這個概念就無法使用SDK 4.0版本以後的新功能,所以我們必須要熟練掌握block的使用

  1、正則開始我們先認識一下如何來定義一個簡單的block

        //1 無參數無傳回值        void (^ MyBlock1)(void);                //2 有參數無傳回值        void (^ MyBlock2)(int a,int b);                //3 有參數有傳回值        int  (^ MyBlock3)(int a,int b);

  2、針對block的聲明,我們如何真正意義上的實現他呢?下面我們探討一下如何?一個有功能的block,我們拿第一個為例子

   void (^ MyBlock1)(void)=^(void){                        NSLog(@"這是我的第一個block");    };

  這樣我們就成功的實現了一個bock,上面是針對了沒有傳回值的block,針對有傳回值的如何?呢,同樣的類似於函數,你只要在最後返回即可了,比如我們用第三個距離,返回兩個數之間的和

      int  (^ MyBlock3)(int a,int b)=^(int a,int b ){                        return a+b;                };

  3、上面我們完成了block得定義和實現,下面我們會考慮如何使用他了吧,其實使用bock是非常簡單的,我們只需要按照使用函數那樣使用就可以了,如下所示

        // 調用block1(無傳回值無參數)        MyBlock1();                // 調用block3(有傳回值有參數)       int value= MyBlock3(10,20);

  4、block作為參數,在開發app的時候你會發現很多情況下都是block作為參數,這也是block的廣泛應用之一,下面我們看看如何讓block在作為參數,現在我們定義Dog對象,DOG對象裡面有屬性和行為,如下

  同時定義一個主人類,主人擁有狗,主人可以對狗發布指令,狗根據不同的指令來執行不同的操作,這裡我們採取塊的形式,將指令通過塊傳遞資訊,此時我們就需要用到塊作為參數:

實現部分如下

在main函數中,我們按照如下方式引用即可

    Host * host=[[Host alloc] init];        Dog * dog=[[Dog alloc] init];        dog.name=@"dahuang";        host.dog=dog;                //0 將指令封裝到block中然後傳遞資訊        void (^ myDog)(Dog *dog)= ^(Dog *dog) {            [dog run];            [dog canBark];            [dog speakName];        };        //1 告訴狗要做的事情        [host askDog:myDog];                 //2 讓狗去做        [host toDo];

  5、__block 關鍵字,block可以作為參數進行傳遞,因此block的執行時機可能不是很確定,所以當我們需要在block裡面,將執行的結果賦值給外面的變數的時候需要注意一點,如果想把block的結果賦值給局部變數,則會報錯,原因是當你執行block的時候你的局部變數可能已經銷毀了,所有block的不能直接給局部變數賦值,當然如果是全域變數是可以的。Block還引入了另一種關鍵字,將局部變數的生命週期變為和全域變數一樣即可,這樣我們就能給局部變數賦值了,如下所示: 

    __block int sum=0;                void (^ myBlock) (int,int)=^(int a ,int b){                        sum=a+b;        };

 

傑瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
著作權聲明:本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
技術諮詢: 

IOS程式文法之block的使用掌握

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.