본문 바로가기

프로그래밍/iOS

[ios] thread 동작

이 때까지는 귀찮아서

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함수 호출

             });

 

}


처음 써보는 거라 신기하기도 하고 삽질도 많이하고 오늘하루가 금방갔다 ㅋㅋ