關於OC中的block自己的一些理解(一)


一、關於block

1、block的作用:保存一段代碼。

2、蘋果官方推薦的一種語法,類似於C語言的函數,但是比函數更加靈活。

3、^是block語法的標識。

二、block的用法

1)無返回值無參數

  

 1 - (void)myFirstBlock
 2 {
 3     //1.定義block
 4     void (^myblock)() = ^{
 5         NSLog(@"無參數無返回值");
 6     };
 7     //2.調用block
 8     myblock();
 9     
10 }

輸出結果:

2016-02-18 09:56:50.124 01-block[750:25107] 無參數無返回值

 2)有參數沒有返回值

- (void)mySecondBlock
{
    //1.定義block
    void (^mySecondBlock)(int,int) = ^ (int num1,int num2){
        NSLog(@"有參數無返回值:%d",num1 + num2);
    };
    //2.調用block
    mySecondBlock(2,3);
}

 輸出結果:

2016-02-18 10:03:22.221 01-block[811:30160] 有參數無返回值:5

 3)有參數有返回值

 1 - (void)myThirdBlock
 2 {
 3     //1.定義block
 4     double (^myThirdBlock)(double,double) = ^ (double r1,double r2){
 5         return r1 + r2;
 6     };
 7     //2.調用block
 8      double r3 = myThirdBlock(1.1,2.2);
 9     NSLog(@"有參數有返回值:%f",r3);
10 }

輸出結果:

2016-02-18 10:06:42.615 01-block[861:32505] 有參數有返回值:3.300000

三、block語法的格式

四、block的注意點

1)Block內部可以訪問外部變量;

2)默認情況下,Block內部不能修改外部的局部變量

3)給局部變量加上__block關鍵字,則這個局部變量可以在block內部進行修改

示例代碼如下:

1 - (void)myFourBlock
2 {
3     int num = 5;
4     void (^myFourBlock)() = ^{
5     
6         num = 6;
7         NSLog(@"%d",num);
8     };
9 }

如果寫成上面的代碼,Xcode會在第六行“num = 6;”報錯:missing __block type specifier;

修改代碼如下:

- (void)myFourBlock
{
    __block int num = 5;
    void (^myFourBlock)() = ^{
    
        num = 6;
        NSLog(@"%d",num);
    };
    myFourBlock();
}

輸出結果:

2016-02-18 10:25:02.195 01-block[1016:45943] 6

 代碼虐我千百遍,我待代碼如初戀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM