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# 과 유사한 방식으로 비동기 콜백처리를 할 수 있다.