Khối Objective-C

Một lớp Objective-C định nghĩa một đối tượng kết hợp dữ liệu với hành vi liên quan. Đôi khi, nó có ý nghĩa khi chỉ đại diện cho một nhiệm vụ hoặc đơn vị hành vi, chứ không phải là một tập hợp các phương pháp.

Các khối là một tính năng cấp ngôn ngữ được thêm vào C, Objective-C và C ++ cho phép bạn tạo các đoạn mã riêng biệt có thể được chuyển cho các phương thức hoặc hàm như thể chúng là các giá trị. Các khối là các đối tượng Objective-C có nghĩa là chúng có thể được thêm vào các bộ sưu tập như NSArray hoặc NSDictionary. Chúng cũng có khả năng nắm bắt các giá trị từ phạm vi bao quanh, làm cho chúng tương tự như các bao đóng hoặc lambdas trong các ngôn ngữ lập trình khác

Cú pháp khai báo khối đơn giản

returntype (^blockName)(argumentType);

Triển khai khối đơn giản

returntype (^blockName)(argumentType)= ^{
};

Đây là một ví dụ đơn giản

void (^simpleBlock)(void) = ^{
   NSLog(@"This is a block");
};

Chúng ta có thể gọi khối bằng cách sử dụng

simpleBlock();

Khối Lập luận và Trả lại Giá trị

Các khối cũng có thể nhận các đối số và trả về giá trị giống như các phương thức và hàm.

Đây là một ví dụ đơn giản để triển khai và gọi một khối với các đối số và giá trị trả về.

double (^multiplyTwoValues)(double, double) = 
   ^(double firstValue, double secondValue) {
      return firstValue * secondValue;
   };

double result = multiplyTwoValues(2,4); 
NSLog(@"The result is %f", result);

Các khối sử dụng định nghĩa loại

Đây là một ví dụ đơn giản sử dụng typedef trong khối. Hãy lưu ý mẫu nàydoesn't work trên online compilercho bây giờ. Sử dụngXCode để chạy giống nhau.

#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;
}

Hãy để chúng tôi biên dịch và thực thi nó, nó sẽ tạo ra kết quả sau:

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.

Các khối được sử dụng nhiều hơn trong các ứng dụng iOS và Mac OS X. Vì vậy, việc hiểu cách sử dụng các khối càng quan trọng hơn.