1. PerformSelectorInXXX
self performSelectorInBackground:@selector(myMethod:) withObject:
self performSelectorInMainThread:@selector(updateUI:) withObject:
-(void)updateUI:(NSDictionary *)param{
}
2. NSOperationQueue
_queue = [[NSOperationQueue alloc] init];
//시간이 오래 걸리는 작업을 만들어 백그라운드 큐에 돌려줍시다.
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
[self heavyOperation];
//오래 걸리는 작업의 결과로 UI업데이트를 진행시켜줍니다.
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self updateUI:nil];
}];
}];
[_queue addOperation:operation];
3. GCD
// 여기서부터 비동기 코드 시작.
// dispatch_async 함수는 내부블럭의 코드 실행에 영향을 받지 않고 바로 실행이 끝난다.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
// 작업이 오래 걸리는 API를 백그라운드 스레드에서 실행한다.
BOOL res = [self heavyOperation];
dispatch_async(dispatch_get_main_queue(), ^{
// 이 블럭은 메인스레드(UI)에서 실행된다.
if (res) {
[self updateUI:nil];
}else {
[self alertFail];
}
});
});
dispatch_one : 한번만
dispatch_after : 일정 시간 후에
No comments:
Post a Comment