Button.h:
#import <Foundation/Foundation.h> @class Button; typedef void (^ButtonBlock) (Button *); @interface Button : NSObject @property(nonatomic,assign) ButtonBlock block; -(void)click; @end
Button.m:
#import "Button.h" @implementation Button -(void)click{ _block(self); } @end
main:
#import <Foundation/Foundation.h> #import "Button.h" typedef int (^MySum) (int,int); //定义一个block方法,block相当于一个函数方法,也由参数和返回值 void test(){ //定义一个Block,^是block的标志 //这个block返回类型是int类型,接受两个int类型的参数 int(^Sum)(int,int)=^(int a,int b){ return a+b; }; //调用block方法 int a=Sum(10,11); NSLog(@"%i",a); } void test2(){ int c=15; //如果外面的变量已经用__block进行了修饰,就可以在block进行修改 __block int d=16; //由于宏定义,这里MySum是一个block类型,sum是一个变量名 MySum sum=^(int a,int b){ //block可以访问外面定义的变量 NSLog(@"我是外部变量C=%i",c); //如果不加__block修饰,默认是不好修改外面的变量的 d=17; NSLog(@"我是外部变量d的修改值=%i",d); return a+b; }; NSLog(@"%i",sum(10,10)); } int main(int argc, const char * argv[]) { @autoreleasepool { Button *btn=[[[Button alloc] init] autorelease]; test(); test2(); btn.block=^(Button *btn){ NSLog(@"按钮%@被点击了",btn); }; [btn click]; } return 0; }结果:
2013-08-02 15:50:25.568 Block[1355:303] 21
2013-08-02 15:50:25.577 Block[1355:303] 我是外部变量C=15
2013-08-02 15:50:25.578 Block[1355:303] 我是外部变量d的修改值=17
2013-08-02 15:50:25.578 Block[1355:303] 20
2013-08-02 15:50:25.579 Block[1355:303] 按钮<Button: 0x100109950>被点击了