Objective-C 블록

Objective-C 클래스는 데이터를 관련 동작과 결합하는 객체를 정의합니다. 때로는 메서드 모음이 아닌 단일 작업 또는 동작 단위를 나타내는 것이 합리적입니다.

블록은 C, Objective-C 및 C ++에 추가 된 언어 수준 기능으로, 마치 값인 것처럼 메서드 또는 함수에 전달할 수있는 고유 한 코드 세그먼트를 만들 수 있습니다. 블록은 Objective-C 객체이므로 NSArray 또는 NSDictionary와 같은 컬렉션에 추가 할 수 있습니다. 또한 둘러싸는 범위에서 값을 캡처하여 다른 프로그래밍 언어의 클로저 또는 람다와 유사하게 만들 수 있습니다.

간단한 블록 선언 구문

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 workonline 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에서 더 많이 사용됩니다. 따라서 블록 사용을 이해하는 것이 더 중요합니다.