Objective-C Block

简介

Block在我们的开发中是非常常见的,比如值得反向传递,我们定义一个Block,就可以完成,对我们编程非常的方便,那么Block到底是从哪里来的呢?他有哪些注意事项?

Block:其实就是一段代码块,也称作闭包。Block是C语言提供的功能,Objective-C是基于C语言,自然Block也具有同样的功能,同时更加强大。

Block使用

Block定义:返回值类型/方法 (^块名称)(参数的类型) = ^(参数类型 参数名){执行的操作} 。 例如:

//无返回值
void (^firstBlock)(int) = ^(int age){print("%d/n",age);}
//返回一个int类型的值
int (^firstBlock)(int) = ^(int age){return age+1;}

Block使用

1、反向传值

  • 在需要(B)传值的页面定义Block
typedef void (^ReturnTextBlock)(NSString *showText);

@interface nickNameViewController : UIViewController

@property (nonatomic, copy) ReturnTextBlock returnTextBlock;

- (void)returnText:(ReturnTextBlock)block;

@end
  • 在需要传值(B)控制器实现方法
- (void)returnText:(ReturnTextBlock)block {
    self.returnTextBlock = block;
}
- (void)viewWillDisappear:(BOOL)animated {
    //判断Block是否存在,在使用的地方赋值
    if (self.returnTextBlock != nil) {
//赋值Block       self.returnTextBlock(self.inputTF.text);
    }
}
  • 在需要用值(A)页面实现并调用
- (void)clickNickName{

    NickNameViewController *nickNameVC = NickNameViewController();

    [nickNameVC returnText:^(NSString *showText) {
        self.nickNameLabel.text = showText;
    }];
}

2、NSArray遍历

一下方法是我经常用到的非常方便,拿出来晾一晾。

[array enumeratorObjectsUsingBlock:  
^(id obj, NSUInteger index, BOOL  *stop){  
    NSLog(@"%i-%@",index,obj);  
    //若终断循环  
    *stop = YES;  
}];  

这个enumeratorObjectsUsingBlock:提供三个参数,每一个item 下表 是否结束便利。实际开发中还是挺方便的。

总结一下: Block作为属性,Block作为方法参数还有作为代理。

PS

Block作为开发中的利器,那么它的内部实现是什么,还有在使用Block需要注意什么,有哪些关键字可以让我们方便的使用?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值