本文章参照李明杰老师的视频.
使用block 首先要会声明和实例化block
block 的声明:
block 分为 有返回值有参数,没返回值有参数,有返回值没参数,没返回值没参数 几种情况
有返回值 有参数的 int (^argReturnBlock)(int,int);
其他几种分别是 int (^ReturnBlock)();
void (argBlock)(int,int);
void (nonBlock)();
然后实例化
举一个例子:
int (int argReturnBlock)(int,int);
argReturnBlock = ^(int v1,int v2){
return v1 + v2;
};
最后是调用
int result = ArgReturnBlock (13,34);
/////////////////////////////////////////////////////////
block 的回调的使用例子;
监听按钮是否被点击了
MyButton * btn = [[MyButton alloc] init]; btn.buttonBlock = ^(MyButton *testbtn){ NSLog(@"%@___被店家了",testbtn); }; [btn click];
在调用click 方法的时候,会回调到上面的block 方法中去.
#import <Foundation/Foundation.h> @class MyButton; typedef void(^listenBlock)(MyButton *sender); @interface MyButton : NSObject @property (nonatomic,assign) listenBlock buttonBlock; - (void)click; @end
在
#import "MyButton.h" @implementation MyButton - (void)click { _buttonBlock(self); } @end
程序运行顺序是当调用click 方法的时候,
会跳转到MyButton.m 中的click 方法中,在这个方法中有_buttonBlock(self);
就会跳转到_buttonBlock 声明的地方,就是外面实例化该block 的地方.
block 的用途:
- 任务完成时回调处理
- 消息监听回调处理
- 错误回调处理
- 枚举回调
- 视图动画、变换
- 排序
- http://blog.csdn.net/jasonblog/article/details/7756763
- 具体参照这个链接中的内容.
再有block 是怎么存储的,