📜  Objective-C块

📅  最后修改于: 2020-11-03 15:54:50             🧑  作者: Mango


一个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的简单示例。请注意,此示例目前不适用于在线编译器。使用XCode运行相同的代码。

#import 

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中。因此,了解块的用法更为重要。