사용자가 textField에 입력하는 검색 기능이 있으며 텍스트가 변경 될 때 로컬 데이터베이스를 검색하고 테이블의 데이터를 채우는 검색 기능이 있습니다.Objective-C - 스레드 취소 중입니까?
입력 한 텍스트에 따라 검색 시간이 1 ~ 10 초 정도 걸릴 수 있으므로 스레드를 사용하기로 결정했습니다. 텍스트가 변경 될 때마다 스레드를 취소하고 (이미 실행중인 경우) 새 키워드로 다시 시작합니다. 문제는 문서 호출에 따라 cancel을 호출해도 스레드가 삭제되지 않는다는 것입니다. 그럼 여기서 해결책은 무엇입니까?
스레드를 죽일 방법이 있습니까? 몇 가지 가능한 해결책의
- (void)populateData
{
if (self.searchThread.isExecuting)
{
[self.searchThread cancel];
}
[self.searchThread start];
}
- (void)populateDataInBackground
{
@autoreleasepool
{
// get data from db
// populate table on main thread
}
}
db에서 데이터를 가져 오는 데는 한 줄의 코드가 필요하고 테이블을 채우는 데는 한 줄의 코드가 필요합니다. 나는 조각으로 분해 할 수있는 방법을 모르겠다 :) – aryaxt
다음 두 줄 사이를 확인해야 할 것 같아요. 대부분의 작업이 첫 번째 단계에 있다고 생각합니다. 테이블의 업데이트는 다음과 같습니다. 사소한 일로 사형 집행을 자제 할 수는 없다는 의심의 여지가 있습니다. 스레드에서 exit를 호출 할 수는 있지만 문서는 경고하지 않습니다. 테이블을 업데이트할지 여부를 나타내는 플래그로 cancel을 사용해야 할 수도 있습니다. – borrrden