在这里您可以轻松区分块和完成处理程序,实际上两者都是块,请参阅下面的详细信息。
块:
块是添加到 C、Objective-C 和 C++ 的语言级功能,它允许您创建不同的代码段,这些代码段可以像值一样传递给方法或函数。块是 Objective-C 对象,这意味着它们可以添加到 NSArray 或 NSDictionary 等集合中。
- 它们可以在以后执行,而不是在
他们已经实施的范围正在执行中。
- 它们的使用最终会导致代码更加干净整洁
写作,因为它们可以用来代替委托方法,写作
只在一个地方,不会分散到多个文件中。
语法: ReturnType (^blockName)(参数)参见示例:
int anInteger = 42;
void (^testBlock)(void) = ^{
NSLog(@"Integer is: %i", anInteger); // anInteger outside variables
};
// calling blocks like
testBlock();
带参数的块:
double (^multiplyTwoValues)(double, double) =
^(double firstValue, double secondValue) {
return firstValue * secondValue;
};
// calling with parameter
double result = multiplyTwoValues(2,4);
NSLog(@"The result is %f", result);
完成处理程序:
而完成处理程序是一种使用块实现回调功能的方法(技术)。
完成处理程序只不过是一个简单的块声明,作为参数传递给需要稍后进行回调的方法。
注意:完成处理程序应该始终是方法中的最后一个参数。一个方法可以有任意多个参数,但始终将完成处理程序作为参数列表中的最后一个参数。
例子:
- (void)beginTaskWithName:(NSString *)name completion:(void(^)(void))callback;
// calling
[self beginTaskWithName:@"MyTask" completion:^{
NSLog(@"Task completed ..");
}];
UIKit 类方法的更多示例。
[self presentViewController:viewController animated:YES completion:^{
NSLog(@"xyz View Controller presented ..");
// Other code related to view controller presentation...
}];
[UIView animateWithDuration:0.5
animations:^{
// Animation-related code here...
[self.view setAlpha:0.5];
}
completion:^(BOOL finished) {
// Any completion handler related code here...
NSLog(@"Animation over..");
}];