Block的应用场景
对象与对象之间的通信方式
1.代理-协议 1对1
2.通知 1对多
3.Block 1对1 但不需要协议
三种通信方式都实现了对象之间的解耦合。
通知的通信方式是1对多; 代理、block是1对1
Block介绍
Block是iOS4.0之后新增的一种语法结构,也称为“闭包(closure)”。
SDK4.0新增的API大量使用了Block。
Block是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象。
对象
方法{
block块{
…代码
}
}
Block初探
//定义block的实现
[self objectMethod:^(int a, int b) {
NSLog(@”这是回调的block函数”);
return a+b;
}];
- (void)objectMethod:(int (^)(int, int))block{
//调用block块
block(10,20)
}
Block的声明
返回值 block变量 参数
int (^ myBlocks)(int);
Block的创建
myBlocks= ^(int a){
int result = a * a;
return result;
};
Block的调用
int ret = myBlocks(10);
project: BlockDemo
new file … name:MainViewController
superclass:UIViewController
打开 AppDelegate.m
加入 #import “MainViewController.h”
在 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 中的
[self.window makeKeyAndVisible]; 下面加入
self.window.rootViewController = [[[MainViewController alloc] init] autorelease];
打开 MainViewController.m
在 - (void)viewDidLoad 中的 [super viewDidLoad]; 下面加入
//---------------block声明与创建-------------------
//声明一个block变量 变量名为myBlock
int(^myBlock)(int);
//或者写法为 int(^myBlock)(int a)一般都不加参数名字 用不上
//无参写法 int(^myBlock)(void)
//创建block
myBlock = ^(int a){
NSLog(@"参数:%d",a);
return 10;
};
//调用block
int ret = myBlock(20);
运行