很多人都被block给绕晕了. 我来简单明了的说下bLock的基本用法
1. 谁需要传值 谁定义block ---->定义
2.谁需要用值 谁调用block ---->调用
与其每次用block的时候 痛苦的纠结着格式问题,不如将一个标准的格式保存下来 ,等到用的时候 赋值 粘贴 改参数名 OK 搞定,绝对不会出错 !! 当然 希望大家先了解其原理,然后再去使用. 还清楚的记得一年前面试的时候让我手写block, 我说我不会, 然后让我说谁传值,谁调用.........我更是一脸懵逼......还是因为对基本原理及用法都搞不懂..每次用的时候就去百度..用完也不去了解....那样就不算去掌握它...现在想想 还觉得搞笑 哈哈.
1. 谁需要传值 谁定义block ---->定义
在.h文件中:
-----------------------------------------
typedefvoid(^workBlock)(NSString*); //宏定义 类似于给一个Block 起别名.
@property(nonatomic,strong)workBlock block; //创建一个Block属性
- (void)returnText:(workBlock)block; //创建一个含有block的方法参数 (在第另一个界面中调用次方法 ,才获取执行block的赋值操作:block不调动的时候 就不会执行 )
在.m文件中:
---------------------------------------
- (void)returnText:(workBlock)block { //实现.h中定义的方法
self.block = block;
}
传值: 然后在需要传值的地方 调用Block 进行赋值:(入在某个数据源方法中拿到了值 :比如点击了某行的cell )
UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath]; //获取当前点击的cell
NSString *right=cell.textLabel.text;
if (self.block!= nil) { (block不调用的时候 不执行) 所以避免了每次运行代码时 都进行的赋值操作
self.block(right);
}
2.谁需要用值 谁调用block ---->调用
------------------------------------------
在需要用到值得地方 调用Block
CategoryController*catagoryPop=[CategoryControlleritem];
[catagoryPop returnText:^(NSString*showText) {
//在这里面取值self.showLabel.text = showText; }
];
网友评论