block代码块看起来语法很怪异,简单来说它就是一个很灵活的代码块,在你想调用的时候在调用。
#import <Foundation/Foundation.h> @class Button; typedef void (^ButtonBlock) (Button *btn); @interface Button : NSObject @property (nonatomic,assign)ButtonBlock block; -(void)click; @end |
#import "Button.h" @implementation Button -(void)click{ _block(self); } @end |
main
#import <Foundation/Foundation.h> #import "Button.h" typedef int(^Sum2) (int,int); void test(){ //返回值 (^block名称)(接收的参数) int (^Sum)(int,int)=^(int a,int b){ return a+b; }; int i=Sum(10,10); } void test2(){ //声明了一个block Sum2 sum=^(int a,int b){ return a+b; };
} int main(int argc, const char * argv[]) { @autoreleasepool {
Button *btn=[[[Button alloc]init]autorelease]; //回调 btn.block=^(Button *btn){ NSLog(@"click...."); }; [btn click]; //运行到这里的时候才去调用block中的方法
} return 0; } |