1.block 基本使用是控制器之间的通讯使用。
2.block 高级使用则是,作为链式编程来使用, Masonry 是典型的链式编程,响应试编程则是RAC。
简单Dome,person类
//person.h
1.1 block定义,控制器之间的通讯如下 ,block 作为属性
/*
--单纯的属性block。
*/
@property (nonatomic,strong) void(^blocktext1)();
//实现block
Person *p = [[Person alloc] init];
//建议使用第一种方式,简单快捷!系统直接给你生成
[p setBlocktext1:^{
}];
p.blocktext1 = ^{
};
1.2typedef定义block ,block作为函数参数
/*
typedef 定义,以下全部使用
*/
typedef void (^blocktypeNull) ();
typedef void (^blocKtypePar) (NSInteger age,NSString *name);
typedef int (^blocktypeReturn)();
/*
--block作为函数参数----
/
/ 1.<block无参数的函数*/
(void)Textblocks:(blocktypeNull ) block;
/* 2.<block带参数的函数*/(void)textblocksPar:(blocKtypePar) Detailpar;
/* 2.<block带返回值*/(void)textblockReturn:(int (^)(int age)) returnpar;
(void)testblockreturn:(blocktypeReturn) testblock;
/*
--block 做为函数返回值----
*/
/* 1.<block作为函数返回值 无参数*/
- (blocktypeNull) TextonereturnPar;
/* 2.<block作为函数返回值 有参数*/ - (blocKtypePar) textTowReturnPar;
/* 3.<block作为函数有回值 有参数*/ - (blocktypeReturn) TextThessReturnPar;
-----<Person.m>
-(void)Textblocks:(blocktypeNull)block{
block();
}
-
(void)testblockreturn:(blocktypeReturn)testblock{
int age = testblock();
NSLog(@"%d",age);
}
- (void)textblockReturn:(int (^)(int age))returnpar{
int a = returnpar(40);
NSLog(@"%d",a);
}
-(void)textblocksPar:(blocKtypePar)Detailpar{
if (Detailpar != nil) {
NSInteger Age = 22;
NSString *name = @"Ray";
Detailpar(Age,name);
}
}
- (blocKtypePar)textTowReturnPar{
return ^(NSInteger age ,NSString *name){
NSLog(@"age = %ld",age);
NSLog(@"name = %@",name);
};
}
- (blocktypeNull)TextonereturnPar{
return ^(){
NSLog(@"无参数的 函数block");
};
}
- (blocktypeReturn)TextThessReturnPar{
return ^int(){
return 30;
};
}
VIewController控制器 实现方法
Person *p = [[Person alloc] init];
[p Textblocks:^{
NSLog(@"无参数无返回值");
}];
[p textblocksPar:^(NSInteger age, NSString *name) {
NSLog(@"%ld%@",age,name);
}];
[p textblockReturn:^int(int age) {
return age;
}];
[p testblockreturn:^int{
NSLog(@"进来了");
return 30;
}];
//链式编程
p.textTowReturnPar(10,@"20");//在这里全部都是调用
p.TextonereturnPar();
int a = p.TextThessReturnPar();