您当前的位置: 首页 > 技术文章 > 移动开发

Objective-C block详解及回调

作者: 时间:2023-09-30阅读数:人阅读

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;


}

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:licqi@yunshuaiweb.com

标签: objective-c ios block
加载中~
如果您对我们的成果表示认同并且觉得对你有所帮助可以给我们捐赠。您的帮助是对我们最大的支持和动力!
捐赠我们
扫码支持 扫码支持
扫码捐赠,你说多少就多少
2
5
10
20
50
自定义
您当前余额:元
支付宝
微信
余额

打开支付宝扫一扫,即可进行扫码捐赠哦

打开微信扫一扫,即可进行扫码捐赠哦

打开QQ钱包扫一扫,即可进行扫码捐赠哦