iOS之block的使用

作者: 明似水 | 来源:发表于2017-02-20 11:47 被阅读419次
图片来自网络

之前群上一个人问我block怎么用,他说虽然也工作半年多了,但是很少自己用block,我本想百度一个demo给他,但发现居然很少有关于block吧demo,所以自己特意简单写了一个。

先附上代码:<a href = "https://github.com/smileKH/HBBlock">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.

相关文章

  • iOS Block存储域及循环引用

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block __block说明符...

  • iOS Block实现原理

    系列文章:iOS Block概念、语法及基本使用iOS Block __block说明符iOS Block存储域及...

  • ios block使用

    iOS Block的使用一 .最简单的block使用******使用block的三个步骤:1.定义block变量 ...

  • iOS Block __block说明符

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block存储域及循环引用 上一...

  • block编程, __block, __weak, __stro

    参考:block编程iOS __weak和__strong在Block中的使用__block & __weak &...

  • Block 初见

    Block 初见 介绍 iOS block 的相关知识 目录 Block 背景知识 Block 使用方式 Bloc...

  • block引用变量造成循环引用解决方案

    参考文章:[ iOS之Block报错:capturing self strongly in this block ...

  • iOS之block的使用

    之前群上一个人问我block怎么用,他说虽然也工作半年多了,但是很少自己用block,我本想百度一个demo给他,...

  • iOS之block的使用

    这篇文章主要的目的是介绍一下block如何使用,希望对大家有所帮助,同时也方便自己记忆。 block基础知识 1....

  • iOS Block实例

    iOS之Block详解:Block详解 ViewController.h(ARC) ViewController....

网友评论

    本文标题:iOS之block的使用

    本文链接:https://www.haomeiwen.com/subject/zxwswttx.html