1.Objective-C 空Block用法
@interface Demo (){
void(^firstBlock)(); //局部变量
}
@end
//回调的block
^(void){
NSLog(@"---------------------------0");
}
typedef void (^Block)(); //定义block类型
//代码里的block变量
void(^firstBlock)() = ^(void) {
}
+ (NSDictionary *)dictWithTitle:(NSString *)title sel:(void(^)())sel; //函数里的代码块
块函数的定义方法
定义块的语法
{ ^ [块返回值类型(可以省略)] (形参类型1 形参1,形参类型2,形参2,.............) { //块执行体 }; return ^{ //…… }; return ^(NSString *str, double value) { //…… }; 将定义块复制给一个块变量 块返回值类型 (^块变量名) (形参类型1 形参1,形参类型2,形参2,.............); double (^hypot)(double,double); void (^printStr)(void); 使用 typedef 定义块变量的类型 typedef 块返回值类型 (^块变量名称) (形参类型1 形参1,形参类型2,形参2,........) typedef void (^FKprintBlock)(NSString *); }
1.当块函数作为属性值的时候,
@property (nonatomic, copy) void (^hideBlock)(); // 设置block回调 __unsafe_unretained TGDealTopMenu *menu = self; _showingMenu.hideBlock = ^{ // 1.取消选中当前的item menu->_selectedItem.selected = NO; menu->_selectedItem = nil; // 2.清空正在显示的菜单 menu->_showingMenu = nil; }; - (void)hide { //_hideBlock随时调用,随处调用,都会回调 if (_hideBlock) { _hideBlock(); } }
2.当块函数作为函数的参数进行传递的话
块函数都是用来传递的,传给自己调用自己的函数
typedef void (^DealsSuccessBlock)(NSArray *deals, int totalCount); typedef void (^DealsErrorBlock)(NSError *error); #pragma mark 获得第page页的团购数据 - (void)dealsWithPage:(int)page success:(DealsSuccessBlock)success error:(DealsErrorBlock)error{ if (error) { error(errorObj); } if (success) { // 请求成功 //块函数都是用来进行传递 success(deals, [result[@"total_count"] intValue]); } } // 加载第_page页的数据 [[TGDealTool sharedTGDealTool] dealsWithPage:_page success: ^(NSArray *deals, int totalCount) { //获取块函数过来的值 // 1.添加数据 [_deals addObjectsFromArray:deals]; // 2.刷新表格 [self.collectionView reloadData]; // 3.恢复刷新状态 [refreshView endRefreshing]; // 4.根据数量判断是否需要隐藏上拉控件 _footer.hidden = _deals.count >= totalCount; } error:^(NSError *error) { [refreshView endRefreshing]; }];
块方法避免重复回调方法:
1. __weak typeof(self) weakSelf = self;
浙公网安备 33010602011771号