나는 어떤 종류의 멀티 스레딩에 익숙하지 않고 단순히 배경 스레드에서 제대로 작동하는 간단한 검색 방법을 얻지 못하는 것 같습니다. NSAutoreleasePool과 UI가 주 스레드에서 업데이트되면 모든 것이 순서대로 진행되는 것 같습니다. 응용 프로그램이 충돌하지 않고 백그라운드에서 검색을 수행하지만 검색 결과는 내가 입력하는 속도에 따라 여러 번 같은 항목을 여러 번 나타냅니다. 검색은 주석 처리 된 다중 스레딩없이 제대로 작동하지만 많은 양의 데이터로 인해 매우 느립니다.iPhone 멀티 스레드 검색
- (void)filterContentForSearchText:(NSString*)searchText {
isSearching = YES;
NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init];
/*
Update the filtered array based on the search text and scope.
*/
//[self.filteredListContent removeAllObjects]; // First clear the filtered array.
for (Entry *entry in appDelegate.entries)
{
NSComparisonResult result = [entry.gurmukhiEntry compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
[self.filteredListContent addObject:entry];
}
}
[self.searchDisplayController.searchResultsTableView performSelectorOnMainThread:(@selector(reloadData)) withObject:nil waitUntilDone:NO];
//[self.searchDisplayController.searchResultsTableView reloadData];
[apool drain];
isSearching = NO; }
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
if (!isSearching) {
[self.filteredListContent removeAllObjects]; // First clear the filtered array.
[self performSelectorInBackground:(@selector(filterContentForSearchText:)) withObject:searchString];
}
//[self filterContentForSearchText:searchString];
return NO; // Return YES to cause the search result table view to be reloaded. }