#import "Button.h"
typedef int (^MySum) (int, int);
void test() {
// 定义了一个block,这个block返回值是int类型,接收两个int类型的参数
int (^Sum) (int, int) = ^(int a, int b) {
return a + b;
};
int a = Sum(10 ,11);
NSLog(@"%i", a);
}
void test2() {
// __block有2个下划线
__block int c = 15;
// 声明了一个block变量
MySum sum = ^(int a, int b) {
// 如果外部的变量用了__block关键字,就可以在block内部修改这个变量
c = 19;
// block可以访问外面定义的变量
NSLog(@"c is %i", c);
return a + b;
};
NSLog(@"%i", sum(10, 10));
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
Button *btn = [[[Button alloc] init] autorelease];
btn.block = ^(Button *btn) {
NSLog(@"按钮-%@被点击了", btn);
};
// 模拟按钮点击
[btn click];
}
return 0;
}
补充:
#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(@"%i", c); // 函数 c = sum(10, 10); NSLog(@"%i", c); int (*sump) (int, int) = sum; c = (*sump)(9, 9); NSLog(@"%i", 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; }