对于block不需要做太多的介绍,而block的声明和简单的调用因为太简单而在这不多做介绍,若需要查看这部分的问题请参考http://www.raywenderlich.com/9438/how-to-use-blocks-in-ios-5-tutorial-part-2 。
个人对于block的理解:在目前的项目中,block主要用于回调使用,基本原理是:在A中调用B的函数,调用的函数执行到一定程度时调用A中的block。在相互调用的时候可以进行参数的传递。下面例子主要是介绍block回调时的参数传递。其中共有两个类,一个时ViewController,一个时BlockTest。在ViewController中调用BlockTest中的方法:
DoSomethingWithBlockandRet,在DoSomethingWithBlockandRet函数回调block。具体代码如下:
ViewController.m:
- (IBAction)BlockStart:(UIButton *)sender {
BlockTest *block = [[BlockTestalloc]init];
NSLog(@"button click");
[block DoSomethingWithBlockandRet: ^(int a){
NSLog(@"接收到参数:%d",a);
return1;
}];
}
BlockTest.m:
//测试有返回值的block调用
- (void)DoSomethingWithBlockandRet: (int(^)(int a))completion
{
NSLog(@"block start");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
int reslut = completion(5);
NSLog(@"%d", reslut);
});
}
下划线部分为block的回调,传递整形5,在block的实现部分可以得到5的值。而在block的返回值为1,在下划线部分也可以得到返回值。因此输出结果应该为:2014-05-22 17:44:32.010 BlockTest[1936:60b] button click
2014-05-22 17:44:32.013 BlockTest[1936:60b] block start
2014-05-22 17:44:37.501 BlockTest[1936:60b]接收到参数:5
2014-05-22 17:44:37.504 BlockTest[1936:60b] 1