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