
Objective-C 의 Block 은 코드의 작은 단위로, 코드의 특정 부분을 캡슐화하여 다른 곳에서 실행할 수 있는 기능
블록은 익명 함수(= 클로저) 와 유사하며, 변수와 상태를 캡처할 수 있음.
블록은 주로 콜백(=callback), 비동기 작업, 반복 작업 등에 사용됨.
01 블록 정의
02 블록의 기본적인 형태
반환 타입 (^블록 이름) (매개변수);
void (^exampleFunction)(void);
// 리턴 값이 void, 블록 이름이 exampleFunction, 매개변수 void
블록 함수 값 정의
exampleFunction = ^{
NSLog(@"Hello World");
};
블록 함수 호출
exampleFunction();
03 블록의 특징
캡처링(Capturing)
__block 키워드를 사용하여 변경할 수 있음.메모리 관리
void (^simpleBlock)(void);
void (^blockWithParam)(NSString *);
void (^blockWithMultiParam)(NSString *, int);
simpleBlock = ^{
NSLog(@"Hello World");
};
blockWithParam = ^(NSString * name) {
NSLog(@"blockWithParam 호출됨 / name: %@", name);
};
blockWithMultiParam = ^(NSString * name, int age) {
NSLog(@"blockWithMultiParam 호출됨 / name: %@ / age: %d", name, age);
};
[blockTest someFunctionWithParam: @"Hello World"];
[blockTest someFunctionWithMultiParams: @"Hello World" withAge: 10];
옵셔널 블록은 일반 블록과 동일하게 정의되지만, nil일 수 있다는 점에서 다름.
// __nullable 로 선택적으로 블럭 함수를 받을 수 있음.
- (void)someFunctionWithOptionalBlockParam:(void(^ __nullable)(NSString *))done;
- (void)someFunctionWithOptionalBlockParam:(void (^ __nullable)(NSString * _Nonnull))done
{
NSLog(@"%s, line: %d, %@", __func__, __LINE__, @"");
// 블록이 nil이 아닌 경우에만 실행
if (done != nil) {
done(@"완료 DoneBlock");
}
}
[blockTest someFunctionWithOptionalBlockParam: nil];