Objective-C block详解及回调

Object-c 中的block就好像一段C函数般,由函数名,有返回值,有参数,由函数体等

1.简单的block

^(int A ,int B)
{
    int C=A*B;
    return C;
};

2、还可以将block定义成一个typedef:

typedef (int) (^sum) (int,int);


@property (nonatuomic,assign) sum sumBlock;

3、有参数无返回值的Block

    void (^sumBlock)(int ,int ) = ^(int a,int b){
        NSLog(@"%d + %d = %d",a,b,a+b);
    };

4、有参数有返回值的Block

NSString* (^logBlock)(NSString *,NSString *) = ^(NSString * str1,NSString *str2){
        return [NSString stringWithFormat:@"%@%@",str1,str2];
    };
    // 调用logBlock,输出的是 我是Block
 NSLog(@"%@", logBlock(@"我是",@"Block"));


5、使用block可以构建一个简单的回掉,下面是核心代码实现:


ComponentBlock.h 

//
//  ComponentBlock.h
//  ZWLimitCounterDemo
//
//  Created by nan on 2021/12/8.
//  Copyright © 2021 wang_ziwu. All rights reserved.
//

#ifndef ComponentBlock_h
#define ComponentBlock_h

//  ComponentBlock.h
//  Memory
//  Created by ludashi on 14-8-19.
//  Copyright (c) 2014年 Mr.li. All rights reserved.
//
 
#import <Foundation/Foundation.h>
//定义Block块类型的变量
typedef void (^BlockType) (NSString *parameter);
@interface ComponentBlock : NSObject
 
//声明Block类型的变量
@property (nonatomic, strong)BlockType blockDemo;
 
//接受要回调的代码块,把接受的代码块赋给成员变量blockDemo
-(void)setBlockDemoTest:(BlockType)blockDemo;
 
//执行代码块的方法
-(void)runBlock;
@end

#endif /* ComponentBlock_h */


ComponentBlock.m

//
//  ComponentBlock.m
//  ZWLimitCounterDemo
//
//  Created by nan on 2021/12/8.
//  Copyright © 2021 wang_ziwu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ComponentBlock.h"
 
@implementation ComponentBlock
 
-(void)setBlockDemoTest:(BlockType)blockDemo
{
    self.blockDemo = blockDemo;
}
 
-(void)runBlock
{
    self.blockDemo(@"我是组件提供的参数");
}
 
@end


main.m
 

#import <Foundation/Foundation.h>
#import "ComponentBlock.h"


int main(int argc, const char * argv[])
{
    @autoreleasepool {
        ComponentBlock *component;
        component = [ComponentBlock new];
         //进行代码块的回调
        [component setBlockDemoTest:^void (NSString *parameter)
        {
            self.firstTextView.text=parameter;
            //打印回调的参数
            NSLog(@"%@", parameter);
        }];
    };


     [component runBlock];
    }
    return 0;


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值