Block的用法总结

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 *);
}
View Code
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();

    }
 }
View Code

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];

 

    }];
View Code

 

块方法避免重复回调方法:

1.  __weak typeof(self) weakSelf = self;

posted on 2015-06-24 11:35  pTrack  阅读(156)  评论(0)    收藏  举报