iOS之block的使用

圖片來自網絡

之前群上一個人問我block怎么用,他說雖然也工作半年多了,但是很少自己用block,我本想百度一個demo給他,但發現居然很少有關于block吧demo,所以自己特意簡單寫了一個。

先附上代碼:<a >HBBlock</a>

介紹一下主要的幾個點:
1、block的基本使用

/**
     *  1、block內部默認是不能修改外面的局部變量,但是可以通過_block關鍵字修飾來改變局部變量
     *  2、block內部可以改變全局變量
     */
    
    __block  int a = 10;
    
    void (^block1)() = ^{
        //block內部可以訪問外面的變量
        NSLog(@"a = %d",a);
        //默認情況下,block內部不能修改外面的局部變量
        //給局部變量加上__block關鍵字,這個局部變量就可以在block內部修改了
        a = 20;
        NSLog(@"修改之后a = %d",a);
        //默認可以對全局變量進行修改
        NSLog(@"b = %d",++b);
        
    };
    block1();

2、block作為屬性

//block作為屬性實現
    HBBlockClass *class = [[HBBlockClass alloc]init];
    //一個參數
    class.block1 = ^(NSString *str){
    
        NSLog(@"str =%@",str);
    };
    
    //兩個參數
    class.block2 = ^(NSString *str,int a){
    
        NSLog(@"str1 = %@ int = %d",str,a);
    };
    //實現方法
    [class blockPropertyUse];

3、block作為方法才參數

//block作為方法參數實現
    HBBlockClass *class = [[HBBlockClass alloc]init];
    [class method1:^(int a, int b) {
        NSLog(@"a = %d b = %d",a,b);
    }];
    
    [class parameterA:4 andParameterB:5 andReturn:^(int c) {
        NSLog(@"c = %d",c);
    }];

4、block作為返回值

//block作為方法的返回值
    HBBlockClass *class = [[HBBlockClass alloc]init];
    MyBlockReturnUse block = [class getBlock];
    block();

5、對象類的.h文件

//block作為屬性 第一步
typedef void(^MyBlockPropertyUse)(NSString *string);
typedef void (^MyBlockPropertyUse1)(NSString *str,int a);

//block作為參數 第一步
typedef void (^MyBlockParameterUse)(int a, int b);
typedef void (^MyBlockParameterUse1)(int c);

//block作為返回值
typedef void (^MyBlockReturnUse)(void);


@interface HBBlockClass : NSObject
//block作為屬性 第二步
@property (nonatomic , strong)MyBlockPropertyUse  block1;
@property (nonatomic , strong)MyBlockPropertyUse1 block2;

//block作為屬性
-(void)blockPropertyUse;

//block作為方法的參數 第二步
-(void)method1:(MyBlockParameterUse)block3;
-(void)parameterA:(int)A andParameterB:(int)B andReturn:(MyBlockParameterUse1)block4;

//block作為返回值
-(MyBlockReturnUse)getBlock;

@end

6、對象類的.m文件

//block作為屬性
-(void)blockPropertyUse{

    self.block1(@"block作為屬性被執行了");
    self.block2(@"block還加了個別的東西",5);
    
    NSLog(@"blockPropertyUse方法被調用了");
}

//block作為方法的參數 第二步
-(void)method1:(MyBlockParameterUse)block3{

    NSLog(@"mothod1被執行了");
    block3(3,4);//回調

}
-(void)parameterA:(int)A andParameterB:(int)B andReturn:(MyBlockParameterUse1)block4{

    NSLog(@"block作為參數被執行了");
    int c = 0;
    c = A*B;
    //回調
    block4(c);
    
}

//block作為返回值
-(MyBlockReturnUse)getBlock{

    return ^{
    
        NSLog(@"getBlock被調用了");
    };
}

END.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 這篇文章主要的目的是介紹一下block如何使用,希望對大家有所幫助,同時也方便自己記憶。 block基礎知識 1....
    長不大的帥小伙閱讀 850評論 1 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,377評論 25 708
  • 我發現想要在一個方面努力到自己想要的成果還真是太難,這個世界真話反而沒人愿意聽了,所以今天,我只想像日記一樣寫點心...
    小主不撒嬌閱讀 225評論 0 0
  • javascript算數 算數 學習感悟 就是一些簡單的內置函數,沒啥難的。 參考 JavaScript Math...
    鴨梨山大哎閱讀 156評論 0 1
  • 高中畢業至今,常常做這樣的夢:還有不長時間就要參加高考了,可還有好多書沒有復習,好多習題沒有練習,緊張得很;高考大...
    高富的閱讀 671評論 4 9