백그라운드에서 동작을 하게만드는 방법은 여러가지가 있다.
NSThread, NSOperation 그리고 GCD
iOS4.3부터인가 지원하게된걸로 기억을 하는데, 블럭코딩과 합쳐져 정말 유용하고 편하다.
GCD는 NSOperation과 같이 큐를 생성하여 동작을 하는데, 간단간단한 작업이라면 글로벌큐에서 돌려도 무방하다.
#define AsyncBlock(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block) #define SyncBlock(block) dispatch_sync(dispatch_get_main_queue(), block) AsyncBlock(^{ sleep(2); NSLog(@"백그라운드에서 실행~"); SyncBlock(^{ NSLog(@"UI관련은 이렇게"); }); });
와 같이 매크로를 만들어서 사용하면 더 간편. 저거 코드를 돌려보면 UI가 죽지않으면서 2초후에 로그가 찍히는 것을 볼 수 있다.
단 UI관련은 메인스레드에서 호출해야한다. 그렇지 않으면 큰 타임렉이 발생
'Objective-C' 카테고리의 다른 글
[Sqlite3] 멀티스레드에서 정상작동되도록 설정하기 (0) | 2012.07.10 |
---|---|
[Debug] gdb를 이용한 객체 내용보기 (0) | 2012.06.28 |
[iOS] 블럭코딩시 블럭 밖 외부 변수 사용 (0) | 2012.06.11 |
[iOS] 문자열을 출력하는데 필요한 너비, 높이 구하기 (0) | 2012.05.29 |
[iOS]URL 인코딩 특수문자 문제 (0) | 2012.05.29 |