Block的一些简单理解

 这是我在网上学习block的时候搜索到的博文代码,加入了一些自己的粗浅理解:

开始引了框架的头文件

#import <Foundation/Foundation.h>

在这里用typedef 定义了一个叫做compareBlock,返回值为int类型参数为int a,int b的Block

typedef int(^compareBlock)(int a, int b);

@interface HBTestBlock : NSObject

下面定义了2个Block的属性,一个是通过已定义的Block修饰的的Block属性,一个是新建的Block属性

@property(nonatomiccopycompareBlock compare;

@property(nonatomiccopyUIView *(^viewGetter)(NSString *imageName); //注意其返回类型为UIView *

@end

下面这两个函数,展示的是如何在其他的类中,使用这两个属性。

#pragma mark 测试对象的属性为block

- (void)testObjPropertyBlock

{

   下面是创建一个HBTestBlock的实例对象,不明白为什么不直接用self,而是实例化一个对象在调用viewGetter的属性

    HBTestBlock *objPropertyBlockObj = [[HBTestBlock allocinit];

   下面是调用Block属性并给这个Block属性赋值。

   注意:只是单纯的赋值,并没有调用。这个地方我认为是理解Block属性的一个关键地方

  因为viewGetter的Block类型已经定义完毕了,所以它的右边赋值对象也必须是一个同类型的Block,

    objPropertyBlockObj.viewGetter = ^(NSString *imageName){

//        return [[UIView alloc] init]; //特别注意此处,若对象不匹配,则会报错,设置为nil也会报错。

    调用currentView方法,返回UIView类型

        return [self currentView];

    };

  这里才是调用,输入了参数(@"hello"

    objPropertyBlockObj.viewGetter(@"hello"); //实际执行block

}

 单纯的方法

- (UIView *)currentView

{

    NSLog(@"now I am in currentView");

    return nil;

}

  这个跟上面的差不多,都是一个意思

- (void)testPropertyBlock

{

    HBTestBlock *properBlockObj = [[HBTestBlock allocinit];

  这里也是给Block的属性赋值,因为被Block修饰compare是一个参数为int a, int b返回值是int类型的Block,所以右边也必须是这样的,跟上面的一个意思

    properBlockObj.compare = ^(int a,int b)

    {

        int result = [self maxer:a another:b];

        NSLog(@"the result is %d",result);

        return result;

    };

  下面是调用

    NSLog(@"the properBlockObj.compare is %d",properBlockObj.compare(100,200));

}


- (int)maxer:(int)a another:(int)b

{

    if (a > b) {

        return a;

    }

    return  b;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值