Block

简介:

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




















本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366476,如需转载请自行联系原作者
相关文章
display:block小技巧
display:block小技巧
59 0
|
存储 iOS开发
浅谈block
浅谈block
61 0
|
编译器 C++
block原理
block本质上也是一个OC对象,它内部也有个isa指针;block是封装了函数调用以及函数调用环境的OC对象
222 0
block原理
|
存储 编译器 iOS开发
Block 详解
原文链接:www.imlifengfeng.com 一、概述 闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」;Block 是 Objective-C 对于闭包的实现。
981 0
|
关系型数据库 数据库管理 Oracle