参考文档
一、忘记block格式?
- 样例一.png
- 样例二.png
二、Block的定义
1、无参数无返回值
//1,无参数,无返回值,声明和定义
void(^MyBlockOne)(void) = ^(void){
NSLog(@"无参数,无返回值");
};
MyBlockOne();//block的调用
2、有参数无返回值
//2,有参数,无返回值,声明和定义
void(^MyblockTwo)(int a) = ^(int a){
NSLog(@"@ = %d我就是block,有参数,无返回值",a);
};
MyblockTwo(100);
3、有参数有返回值
//3,有参数,有返回值
int(^MyBlockThree)(int,int) = ^(int a,int b){
NSLog(@"%d我就是block,有参数,有返回值",a + b);returna + b;
};
MyBlockThree(12,56);
4、无参数有返回值(很少用到)
//4,无参数,有返回值
int(^MyblockFour)(void) = ^{NSLog(@"无参数,有返回值");
return45;
};
MyblockFour();
5、实际开发中常用typedef 定义Block
例如,用typedef定义一个block:
typedef int (^MyBlock)(int , int);
这时,MyBlock就成为了一种Block类型
在定义类的属性时可以这样:
@property (nonatomic,copy) MyBlock myBlockOne;
使用时:
self.myBlockOne = ^int (int ,int){
//TODO
}
三、block的使用
1、block作为对象的属性
第一步:写一个简单的block
//写一个block inlineblock
void(^LXBlock)() = ^() {
NSLog(@"aa");
};
//调用这个block
LXBlock();
第二步:创建一个Person对象类,并创建一个属性block
@interface Person : NSObject
/* block : ARC使用strong 非ARC使用copy */
@property (nonatomic, strong) void(^block)();
@end
第三步:创建Person对象,并将block赋值给他的属性
Person * p = [[Person alloc]init];
p.block = LXBlock;
第四步:调用这个Person对象的属性
_per.block();
2、block作为方法的参数
第一步:接着上面的Person.h类中,声明创建eat方法
//参数是一个block
//block的返回值:void 参数:NSString * 名字:block
-(void)eat:(void(^)(NSString *))block;
第二步:在Person.m中实现
-(void)eat:(void (^)(NSString *))block {
block(@"参数");
}
第三步:调用
Person * p1 = [[Person alloc]init];
[p1 eat:^(NSString * s) {
NSLog(@"%@",s);
}];
3、block作为返回值
第一步:在Person.h中声明run
-(void(^)(int))run;
第二步:在Person.m中实现
-(void(^)(int))run{
return ^(int m) {
NSLog(@"哥们起来了!!== %d",m);
};
}
第三步:调用
//3.block作为返回值
Person * p = [[Person alloc]init];
p.run(10);
整个Person类以及调用
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
/* block : ARC使用strong 非ARC使用copy*/
@property (nonatomic, strong) void(^block)();
-(void)eat:(void(^)(NSString *))block;
-(void(^)(int))run;
@end
Person.m
#import "Person.h"
@implementation Person
-(void)eat:(void (^)(NSString *))block {
block(@"参数");
}
-(void(^)(int))run{
return ^(int m) {
NSLog(@"哥们起来了!!== %d",m);
};
}
@end
调用
- (void)myblock {
//写一个block inlineblock
void(^LXBlock)() = ^() {
NSLog(@"aaa");
};
LXBlock();
//1.block作为对象的属性
Person * p = [[Person alloc]init];
p.block = LXBlock;
_per = p;
//测试
_per.block();
}
-(void)myblock_2 {
//2.block作为方法参数
Person * p1 = [[Person alloc]init];
[p1 eat:^(NSString * s) {
NSLog(@"%@",s);
}];
}
-(void)myblock_3 {
//3.block作为返回值
Person * p = [[Person alloc]init];
p.run(10);
}
网友评论