2012-12-01 2 views
0

개인 라이브러리에서 이와 같은 블록 함수를 사용하지만 실제 생성 방법을 모르겠습니다. 그들이 어떻게 내 반으로 돌아가 블록을 실행할 것입니까?Objective-c : 블록 만들기 함수

다음
ImAnotherClass *sameObj = [[ImAnotherClass alloc] init]; 

[sameObj testFunctionWithBlock:^(BOOL success, NSError *error) 
{ 
    if(!error) 
    NSLog(@"you'll only read this, once test function was done!"); 
}]; 

[sameObj release]; 

, 주목할만한 것은하는 test 기능의 실행을 완료하는 (분) 좋은 시간이 걸릴 수 있습니다,하지만 완벽 블록에 선을 인쇄합니다! 내 기능조차도 이미 실행됩니다.

답변

4
//your class .h 
+ (void) doSomething:(NSString *) string 
        successCallback:(void (^)(id successValue)) successCallback 
     errorCallback:(void (^)(NSString *errorMsg)) errorCallback; 


//your class.m 
+ (void) doSomething:(NSString *) string 
        successCallback:(void (^)(id successValue)) successCallback 
     errorCallback:(void (^)(NSString *errorMsg)) errorCallback { 

    //do your work here 
    //set your bool for error 

    if(error) { 
     errorCallback(<error value>); 
    } else { 


     successCallback(<value on success>); 
    } 
} 

메이크업 개체를하고 당신이 그것을까지 제어 패스를 못하게 잠을 필요가없는 사용 블록이 실행됩니다.

[objYourClass doSomething:(NSString *) string 
          successCallback:(void (^)(id successValue)) successCallback{ 
    //get your success value 

    } 
       errorCallback:(void (^)(NSString *errorMsg)) errorCallback{ 
//get your error value 
    }]; 
+0

이것은 앞으로 이동하지 못하도록 제어를 성공적으로 차단합니다. – amar

+0

나는 어떤 것을 건네 줄 수있는 문자열을 전달했습니다. – amar

0

당신이 기능을 내부에 구현하는 방법을 궁금해하는 경우는 다음과 같이 수 : 당신의 CALSS의

- (void) doSomethingWithCompletion: (dispatch_block_t) completion 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     sleep(10); // wait for ten seconds 
     if (completion) { 
      dispatch_async(dispatch_get_main_queue(), completion); 
     } 
    }); 
}