block

苹果官方非常推荐使用block,具体体层没研究过,只知道block封装了一段代码,可以在任意你需要的地方调用,用法如下

返回值类型(^block名)(形参列表)这就定义了一个block

比如定义一个返回两个数相加的block

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        int (^Sum)(int,int)=^(int a,int b){
            return a+b;
        };
        
        int a=Sum(2,4);
        NSLog(@"%d",a);

    }
    return 0;
}

block还有一种特性,就是可以访问外部的变量,但是默认情况下不能修改外部的变量,如果要在block内部修改外部的变量,该变量需要被__block关键字修

__block int temp=6;
        void(^AccessTemp)()=^(){
            NSLog(@"temp=%d",temp);
            temp=8;
            NSLog(@"temp=%d",temp);
        };
        AccessTemp();

 打印结果:

2014-06-21 19:13:47.243 block测试[63536:303] temp=6

2014-06-21 19:13:47.244 block测试[63536:303] temp=8

顺利访问并修改了……

可以把block用typedef定义成一种类型,像使用普通类型一样使用block

typedef  int(^Jisuan)(int,int);

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Jisuan mul=^(int a,int b){
            return a*b;
        };
        NSLog(@"%d",mul(2,4));
        
    }
    return 0;
}

 定义了一个接收两个int参数,返回int结果的block,将该block typedef为Jisuan类型,就可以像声明普通类型一样声明并使用Jisuan了

posted @ 2014-06-21 19:29  luseike  阅读(196)  评论(0编辑  收藏  举报