block是对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的,^是block语法的标识。
blcok常使用的3种方式:
1.block作为对象的属性
2.block作为方法参数
3.block作为返回值(使用场景很多,扩展性特别强)
1.block作为对象的属性
people类
#import <Foundation/Foundation.h>
typedef void (^PeopleBlock) (void);
@interface People : NSObject
@property (nonatomic,strong) PeopleBlock peopleBlock;
@end
vc控制器
- (void)block1{
People *p = [People new];
void (^LCBlock)(void) = ^(){
NSLog(@"1.block作为对象的属性");
};
p.peopleBlock = LCBlock;
p.peopleBlock();
}
block作为方法参数
people.h
#import <Foundation/Foundation.h>
@interface People : NSObject
- (void)eat:(void(^)(NSString *))blcok;
@end
people.m
- (void)eat:(void (^)(NSString *))blcok{
blcok(@"2.block作为方法参数");
}
vc控制器
- (void)block2{
People *p = [People new];
[p eat:^(NSString * str) {
NSLog(@"%@",str);
}];
}
block作为返回值(使用场景很多,扩展性特别强)
people.h
#import <Foundation/Foundation.h>
@interface People : NSObject
- (void(^)(NSString *))str;
@end
people.m
- (void (^)(NSString *))str{
return ^(NSString *str){
NSLog(@"%@",str);
};
}
vc控制器
- (void)block3{
People *p = [People new];
p.str(@"3.block作为返回参数");
}
在平时开发当中,这3种是使用最频繁的,理解透这三种使用,是对我们的基本要求。
END