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() {
// __block有2个下划线
__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;
}
原文:http://www.cnblogs.com/jinyaowei/p/3746639.html