- 비동기 처리
- 소요시간이 오래 걸리는 작업을 백그라운드에서 처리하여 메인 스레드에 반영.
- 동시에 여러 작업을 하거나 지속적인 모니터링이 필요한 작업에 사용.
1) 웹 상의 이미지 다운로드
2) 데이터 파싱
3) 채팅관련 푸시 모니터링 등 비동기 처리 방법
- 비동기 디자인 패턴 : delegate, @selector, block, Notification
- NSThread
1) NSOperation보다 우선순위 관리가 좋음
2) 사용 방법
1] 상속: main() 메소드를 overriding, 인스턴스 생성 후 start() 메소드 실행.
2] 클래스메소드: 실행 할 작업을 메소드에 구현, 인스턴스 생성 후 start() 메소드 실행.
3] detachNewThreadSelector - 클래스메소드와 다르게 호출과 동시에 실행 - NSInvocationOperation과 유사. 4] detachNewThreadBlock - 백그라운드에서 실행되는 작업을 블록으로 구현 - NSBlockOperation과 유사. 3) 포함된 메소드: exit(종료) cancel(중지) sleep-(잠시 중지)
4) 상태: executing(작업 중) finished(종료) cancelled(취소)
- NSOperation
1) 우선순위, 의존성 등을 지원하는 Thread safe한 객체(네트워크, 이미지 처리 등의 어떤 작업) 2) 사용 방법
1] 상속: main() 메소드 overriding, 인스턴스 생성 후 start() 메소드 실행.
2] NSBlockOperation(detachNewThreadBlock와 유사) 3] NSInvocationOperation(detachNewThreadSelector와 유사) 4] NSOperationQueue에 추가 3) NSOperationQueue: 우선순위와 최대 실행 작업 수에 따라 작업 관리. 4) asynchronous 프로퍼티로 동기/비동기 결정 5) 속성: ready(초기화 완료) executing(작업 중) finished(종료, Dequeue) cancelled(취소, executing: NO, finished: YES)
- (performSelector-)
1) 1회만 호출 하는 경우 사용하기 편리함
2) waitUntilDone을 통해 동기/비동기 처리 가능 3) 동기 / 비동기 처리 예
- (void)viewDidLoad { [super viewDidLoad]; // 동기처리 NSLog(@"------------- before Method -------------"); [self outputLog]; [self performSelector:@selector(outputLog) withObject:nil]; [self performSelectorOnMainThread:@selector(outputLog) withObject:nil waitUntilDone:YES]; NSLog(@"------------- after Method -------------"); // 동기처리 결과 // ------------- before Method ------------- // ------------- In Method ------------- // ------------- after Method ------------- // 비동기 처리 NSLog(@"------------- before Method -------------"); [self performSelectorOnMainThread:@selector(outputLog) withObject:nil waitUntilDone:NO]; [self performSelectorInBackground:@selector(outputLog) withObject:nil]; NSLog(@"------------- after Method -------------"); // 비동기처리 결과 // ------------- before Method ------------- // ------------- after Method ------------- // ------------- In Method ------------- } - (void)outputLog { NSLog(@"------------- In Method -------------"); }
- Timer
1) 아주 간단한 작업에만 사용하기 적절
- CGD(추가 업로드 예정)- 교착상태를 막는 방법
- 변수: atomic 사용(property 변수 default형은 atomic)
- 메소드: @synchronized 사용. - 비동기 처리 장점 및 단점
- 장점: 동시에 여러 작업을 처리하는 것이 가능하여 자원을 효율적으로 활용 가능
- 단점: 동기 처리보다 설계가 복잡하고, dead lock(교착상태)이 발생할 수 있음
'프로그래밍 > iOS' 카테고리의 다른 글
GCD(Grand Central Dispatch) 사용 (0) | 2017.04.21 |
---|---|
KVC(Key-Value Coding) & KVO(Key-Value Observing) (0) | 2017.04.18 |
setNeedsLayout VS layoutIfNeeded / setNeedsDisplay VS layoutIfDisplay (1) | 2017.04.14 |
Run Loop (0) | 2017.04.12 |
NSHashTable (0) | 2017.04.11 |