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; } |