gpt4 book ai didi

ios - 完成处理程序和 block 之间的区别 : [iOS]

转载 作者:IT王子 更新时间:2023-10-29 05:10:51 26 4
gpt4 key购买 nike

当我在 SwiftObjective-C 中使用它们时,我对完成处理程序和 block 感到困惑。当我在谷歌上的 Swift 中搜索 block 时,它显示了完成处理程序的结果!有人能告诉我关于 SwiftObjective-C 的完成处理程序和 block 之间有什么区别吗?

最佳答案

在这里您可以轻松地区分 block 和完成处理程序,实际上两者都是 block ,请参阅下面的详细信息。

block :

block 是添加到 C、Objective-C 和 C++ 的语言级功能,它允许您创建不同的代码段,这些代码段可以像值一样传递给方法或函数。 block 是 Objective-C 对象,这意味着它们可以添加到 NSArray 或 NSDictionary 等集合中。

  • 它们可以在以后执行,而不是在他们已经实现的范围正在执行。
  • 它们的使用最终会导致代码更干净整洁写作,因为它们可以用来代替委托(delegate)方法,写只在一个地方,不会传播到很多文件。

语法: ReturnType (^blockName)(Parameters) 参见示例:

int anInteger = 42;

void (^testBlock)(void) = ^{

NSLog(@"Integer is: %i", anInteger); // anInteger outside variables

};

// calling blocks like
testBlock();

带参数的 block :

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);

完成处理程序:

而完成处理程序是一种使用 block 实现回调功能的方法(技术)。

完成处理程序只不过是一个简单的 block 声明,作为参数传递给需要稍后进行回调的方法。

注意:完成处理程序应该始终是方法中的最后一个参数。一个方法可以有任意多的参数,但始终将完成处理程序作为参数列表中的最后一个参数。

例子:

- (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..");
}];

关于ios - 完成处理程序和 block 之间的区别 : [iOS],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com