谈谈Block作为属性、方法参数、方法的返回值的应用

IOS开发中block常用于 作为对象的属性、作为方法的参数、作为方法的返回值。

首先需要了解一下block的标准书写格式: 

returnType(^blockName)(parameterTypes) = ^returnType(parameters) {

    statements

  };


下面我们结合代码对几种情况作介绍。

一、block作为对象的属性。

我们在工程中常见一个Person类,它是继承与NSObject

Person类添加一个block属性。即:

@property(nonatomic,strong) void(^block)();

接着在viewDidLoad中书写一个方法

- (void)propertyTest{

    Person * p = [[Person alloc]init];

    void(^AMFBlock)() = ^() {

        NSLog(@"enter block");

    };

    p.block = AMFBlock;

    _p = p;

}

接着在点击touchesBegan方法调用p对象的block属性时,就会回调到propertyTest方法中的block代码块

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    _p.block();  //回调到propertyTest方法中的block代码块去

}


二、block作为方法的参数。

给Person类添加一个有block参数的方法。即:

.h文件

- (void)eat:(void(^)(NSString *))block;

.m文件

- (void)eat:(void (^)(NSString *))block{

    block(@"苹果");

}


给viewController添加一个methodParameter方法,且在viewDidLoad中调用该方法[self methodParameter];

- (void)methodParameter{

    Person * p = [[Person alloc]init];

    [p eat:^(NSString * s) {

        NSLog(@"爱吃%@",s);

    }];

}

那么当执行上面写的 block(@"苹果");时候,接着就会自动回调到methodParameter中的 block 代码块。


三、block作为方法的返回值。

给Person类添加一个返回一个block类型的方法。即:

.h文件

-(void(^)(int))run;

.m文件

-(void (^)(int))run

{

    return ^(int m){

        NSLog(@"跑起来了!!跑了%d",m);

    };

}


viewController的 viewDidLoad方法中实现以下代码,当调用 receiveBlock( 100 )时,会自动回调到NSLog(@"跑起来了!!跑了%d",m)代码块中

Person * p = [[Person alloc]init];    

void(^receiveBlock)(int i) = p.run; //方法的返回值返回了一个block

receiveBlock(100); //输出结果跑起来了!!跑了%d",m)代码块中

我们经常用到的布局框架masonry很多地方用到了block作为方法的返回值思想。







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值