Objective-C 块

  • 一个Objective-C类定义了一个将数据与相关行为结合在一起的对象。有时,仅代表单个任务或行为单位而不是方法的集合才有意义。块是C,Objective-C和C++中添加的一种语言级别的功能,它使您可以创建不同的代码段,这些代码段可以作为值传递给方法或函数。块是Objective-C对象,这意味着它们可以添加到诸如NSArrayNSDictionary之类的集合中。它们还具有从封闭范围捕获值的能力,使其类似于其他编程语言中的闭包或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的块

    这是在块中使用typedef的简单示例。使用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() {
        
       SampleClass *sampleClass = [[SampleClass alloc]init];
       [sampleClass performActionWithCompletion:^{
          NSLog(@"Completion is called to intimate action is performed.");
       }];
    
       return 0;
    }
    
    让我们编译并执行它,它将产生以下结果-
    
    2020-09-10 08:13:57.155 test[284:303] Action Performed
    2020-09-10 08:13:57.157 test[284:303] Completion is called to intimate action is performed.
    
    块更多地用于iOS应用程序和Mac OS X中。因此,了解块的用法更为重要。