关于Block,博主不才,简单分为三种来用:
- 像函数一样定义和使用,,不同于函数的是可以定义在方法内也可以定义在方法外
- 定义成property的属性来使用
- 用作修饰词
接下来一样样的来展示;
1.像函数一样定义和使用,,不同于函数的是可以定义在方法内也可以定义在方法外
1)在方法中使用
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *(^thisBlock) (NSString *thisName) = ^(NSString *name){
return [NSString stringWithFormat:@"%@:%@",@"name",name];
};
NSLog(@"%@",thisBlock(@"xiaoming"));
}
2)在方法外使用,就像定义一个方法一样
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
BlockVoid(24);
}
void (^BlockVoid) (int age) = ^(int xiaomingAge){
NSLog(@"xiaomingAge:%d",xiaomingAge);
};
总结: 上面俩block也是block的一种写法不过这么用的貌似不多见,大多时候这么写反而显得麻烦了(从这里可以看出,block可以定义在方法内部也可以定义在方法外部,在外部的时候看着是不是更像函数了)
2.定义成property的属性来使用
这是一种我们经常用的方法,举个例子
/**
常规无返回值有参数block,比较常用
*/
@property(nonatomic,copy)void (^myBlock) (NSString *name,int age);
/**
常规有返回值有参数block,使用起来其实和上面那个差别不大
*/
@property(nonatomic,copy)NSString *(^haveReturnBlock) (NSString *name);
//用法
- (void)test2
{
_myBlock(@"CodeLiu",24);
}
- (NSString *)test3
{
return _haveReturnBlock(@"小花");
}
除了这个用法,还有一种很好玩的用法,看着比较生动,其实是一样的:
#import <Foundation/Foundation.h>
/**
定义一个block
@param returnContent 返回值
*/
typedef void(^RetureContentBlock)(id returnContent);
@interface LHBlockForUse : NSObject
/**
用定义的block来声明一个变量
*/
@property(nonatomic,copy)RetureContentBlock returnBlock;
@end
//用法
- (void)test1
{
_returnBlock(@"You can put every type in here");
}
3.用作修饰词
在Block内是不能修改Block外的变量的,如果要修改就需要用__block进行修饰
__block int lastAge = 24;
void (^lastAgeBlock) (int age) = ^(int addAge){
lastAge = lastAge + addAge;
NSLog(@"xiaomingLastAge:%d",lastAge);
};
lastAgeBlock(1);
以上是Block的简单应用,如果哪里写的不好欢迎指正,下载地址:Block 的简单使用