iOS开发- 关于Block的几种应用

来源:互联网 发布:linux增加局域网ip段 编辑:程序博客网 时间:2024/06/10 00:46

关于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 的简单使用

1 0
原创粉丝点击