块(Blocks)
优质
小牛编辑
128浏览
2023-12-01
Objective-C类定义了一个将数据与相关行为相结合的对象。 有时,仅表示单个任务或行为单元而不是方法集合是有意义的。
块是添加到C,Objective-C和C ++的语言级功能,它允许您创建不同的代码段,这些代码段可以传递给方法或函数,就像它们是值一样。 块是Objective-C对象,这意味着它们可以添加到NSArray或NSDictionary等集合中。 它们还能够从封闭范围中捕获值,使其类似于其他编程语言中的闭包或lambda
简单块声明语法
returntype (^blockName)(argumentType);
简单的块实现
returntype (^blockName)(argumentType)= ^{
};
这是一个简单的例子
void (^simpleBlock)(void) = ^{
NSLog(@"This is a block");
};
我们可以使用调用块
simpleBlock();
块接受参数和返回值
块也可以像方法和函数一样获取参数和返回值。
下面是一个使用参数和返回值实现和调用块的简单示例。
double (^multiplyTwoValues)(double, double) =
^(double firstValue, double secondValue) {
return firstValue * secondValue;
};
double result = multiplyTwoValues(2,4);
NSLog(@"The result is %f", result);
块使用类型定义
这是一个在块中使用typedef的简单示例。 请注意,此示例doesn't work用于online compiler 。 使用XCode运行相同的。
#import <Foundation/Foundation.h>
typedef void (^CompletionBlock)();
@interface SampleClass:NSObject
- (void)performActionWithCompletion:(CompletionBlock)completionBlock;
@end
@implementation SampleClass
- (void)performActionWithCompletion:(CompletionBlock)completionBlock {
NSLog(@"Action Performed");
completionBlock();
}
@end
int main() {
/* my first program in Objective-C */
SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass performActionWithCompletion:^{
NSLog(@"Completion is called to intimate action is performed.");
}];
return 0;
}
让我们编译并执行它,它将产生以下结果 -
2013-09-10 08:13:57.155 demo[284:303] Action Performed
2013-09-10 08:13:57.157 demo[284:303] Completion is called to intimate action is performed.
块在iOS应用程序和Mac OS X中使用得更多。因此,了解块的用法更为重要。