[objc] block 사용법

천현철·2021년 2월 19일
0

iOS

목록 보기
32/51

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)

profile
기도하지말고 행동하라

0개의 댓글