이 때까지는 귀찮아서
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
// 시간 많이 걸리는 코드
dispatch_async(dispatch_get_main_queue(), ^{
// ui작업, 이미지 작업
});
});
위와 같이 작업 했었다.
어지간히 이상하지 않은 한 잘 동작하였고, thread를 내가 관리 하지 않아도 되니깐 편하기 떄문에..
그런데 이것의 문제점이 매번 새로운 thread를 생성하기 떄문에 같은 객체를 여러번 타야하는 동작에 대해서는 한 thread만 돌려야 하기 때문에 위의 async를 사용하는 것은 제대로 동작하지 않았다.
따라서 1개 thread만 생성하여 사용방법
1. operation 큐 갯수 설정
@property (strong, nonatomic) NSOperationQueue* queue;
_queue =[[NSOperationQueue alloc] init];
[_queue setMaxConcurrentOperationCount:1];
2. queue 사용하기
NSInvocationOperation* invo = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(threadFunction:) object:dic];
[_queue addOperation:invo];
3. thread함수
- (void) threadFunction :(id) object
{
// 할 일
// thread에 남아있는 작업 모두 캔슬
[_queue cancelAllOperations];
dispatch_async(dispatch_get_main_queue(), ^{
// ui작업, 이미지 작업, 혹은 delegate함수 호출
});
}
처음 써보는 거라 신기하기도 하고 삽질도 많이하고 오늘하루가 금방갔다 ㅋㅋ
'프로그래밍 > iOS' 카테고리의 다른 글
[iOS] NSString을 구분자 기준으로 따로 저장 (0) | 2015.04.09 |
---|---|
[iOS] NSString에 공백대신 하이픈(-) 넣기 (0) | 2015.04.09 |
[ios] swift 가지고 놀기 (0) | 2015.04.09 |
[iOS] UIImage의 DPI 정보 변경하기 (0) | 2015.04.09 |
[ios] AVCaptureSession Zoom (0) | 2015.04.09 |