티스토리 뷰

Development Note/iOS

[objc] block 사용법

JamesChun 2021. 5. 11. 14:08

objc 문법에서 block 은 비동기처리시 delegate 보다 좀더 간편하게 쓸 수 있는 방식이다.

어차피 찾아보면 이론설명은 널리고 널렸으니 예제만 설명한다.

선언부:

typedef void (^ResultCallback)(NSString *result, NSError *error);

...

@property (nonatomic, strong) ResultCallback resultCallback;

...

- (void) requestFunc:(ResultCallback)completion;

만약 requestFunc 라는 함수내에서 콜백처리를 하지 않는다면 resultCallback 을 예제와 같이 property 로 선언해두고 다른 함수내에서 처리도 가능하다.

구현부:

- (void) requestFunc:(ResultCallback)completion
{
    //로직상 바로 처리가 불가한 경우 콜백등록.
    self.resultCallback = completion;

    //가령 네트워크통신 후 바로 처리할 경우
    if(error){
        completion(data, nil);
    }else{
        completion(nil, error);
    }
}

- (void) otherFunc
{
    if(success) {
        self.resultCallback(data, nil);
    }else //failed
    {
        self.resultCallback(nil, error);
    }
}

이렇게 사용하면 자바나 c# 과 유사한 방식으로 비동기 콜백처리를 할 수 있다.

출처 : [Objective-C] 블럭 문법 (Blocks Programming)

댓글