Block in iOS (1)

来源:互联网 发布:淘宝闲鱼能小二介入 编辑:程序博客网 时间:2024/05/21 10:29
如果大家翻翻UIView的几个动画的函数,就能够看到下面一个函数的定义,里面多了一个“^”,其实它就叫block。

+ (void)animateWithDuration:(NSTimeInterval)duration 
 animations:(void (^)(void))animations 
        completion:(void (^)(BOOL finished))completion

什么是block,其实简单的理解就是一段代码块。典型的block声明格式如下:

return_type (^block_name)(param_type, param_type, ...)


下面是一个例子,block返回的是一个整型,为两个数的和。

^(int number1, int number2){ return number1 + number2 };


如果将block的定义和声明放到一起,就得到下面的一个语句:

int (^add)(int,int) = ^(int number1, int number2){

    return number1+number2;

};


我们可以这样使用block:

int resultFromBlock = add(2,2);


再回到我们开头的animateWithDuration函数,一个典型的应用类似如下:

[UIView animateWithDuration:0.5

                 animations:^ {

                                 [customerImageView setAlpha:1.0f];

                                 [customerImageView setCenter:CGPointMake(100,100)];

                              }

                 completion:^(BOOL finished) {

                                 [customerImageView removeFromSuperview];

                              }];


block那么难理解和读,为什么还要用它,使用block有什么好处呢?如下几点希望能够帮组大家理解:


1. 如果大家不使用block来实现几个动画一起的话,就会发现代码显得很繁琐,而且可能需要再单独写一个回调函数,但是使用了block,就完全避免使用beginAnimations/commitAnimations

2. 代码简单了,不用在几个地方维护开启动画和回调的代码;

3. 貌似苹果推荐我们这样用block。

0 0