Block

来源:互联网 发布:淘宝食品代理公司注 编辑:程序博客网 时间:2024/04/30 06:44

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>被点击了


原创粉丝点击