Block函数

 

typedef int (^MyBlock) (int, int);  //MyBlock就是这个Block的别名

 

void test() {

    // 定义了一个block,这个block返回值是int类型,接收两个int类型的参数

    int (^block) (int, int) = ^(int a, int b) {

        return a + b;

    };

    int a = block(10 ,11);

    

    NSLog(@"a = %d", a);

}

 

void test2() {

    // __block2个下划线

    __block int c = 15;

    

    // 声明了一个block变量

    MyBlock sum = ^(int a, int b) {

        // 如果外部的变量用了__block关键字,就可以在block内部修改这个变量

        c = 19;

        

        // block可以访问外面定义的变量

        NSLog(@"c = %d", c);

        

        return a + b;

    };

    

    NSLog(@"%d",  sum(10, 10));

}

 
 
 
 
 
 

#import <Foundation/Foundation.h>

 

int sum(int a, int b) {

    return a + b;

}

 

void test() {

    int (^Sum) (int, int) = ^(int a, int b) {

        return a + b;

    };

    

    // block

    int c = Sum(10, 9);

    NSLog(@"%d", c);

    

    // 函数

    c = sum(10, 10);

    NSLog(@"%d", c);

    

    int (*sump) (int, int) = sum;

    c = (*sump)(9, 9);

    NSLog(@"%d", c);

}

 

typedef char * String;

 

void test1() {

    // 定义了Sum这种Block类型

    typedef int (^Sum) (int, int);

    

    // 定义了sump这种指针类型,这种指针是指向函数的

    typedef int (*Sump) (int, int);

    

    // 定义了一个block变量

    Sum sum1 = ^(int a, int b) {

        return a + b;

    };

    

    int c = sum1(10, 10);

    NSLog(@"%i", c);

    

    // 定义一个指针变量p指向sum函数

    Sump p = sum;

    // c = (*p)(9, 8);

    c = p(9, 8);

    NSLog(@"%i", c);

}

 

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

{

 

    @autoreleasepool {

        test1();

    }

    return 0;

}

posted @ 2014-05-22 22:38  巴格  阅读(729)  评论(0编辑  收藏  举报