我在NSArray
中有2个数据。我必须搜索NSArray
。现在我正在拆分这个NSArray
并在不同的线程中搜索它们,否则需要很长时间。我可以搜索数据,但无法将其与另一个NSArray
组合。
例如,如果我搜索“a”,我会在所有主题中以“a”获得所有结果。但是这些线程结果不能合并为单个NSArray
。
我使用的代码如下
NSArray *subArray = [mArrayOrginalData subarrayWithRange:range];
SearchOperation *anOperation = [[SearchOperation alloc]init];
[anOperation setSearchData:[subArray mutableCopy]];
[anOperation setPattern:txtFieldPattern.text];
[anOperation setTarget:self];
[anOperation setAction:@selector(searchResultHandler:)];
[searchQueue addOperation:anOperation];
检索数据的代码是另一个类(NSOperation),代码如下所示
@implementation SearchOperation
- (void) main{
NSLog(@"%s",__PRETTY_FUNCTION__);
NSMutableArray* mArrayTmp = [Search searchByPattern:self.pattern inputArray:searchData];
NSLog(@"Sub result count : %d",[mArrayTmp count]);
[target performSelector:action withObject:mArrayTmp];
}
@@end
答案 0 :(得分:1)
我假设搜索逻辑处理足够密集(甚至针对NSArray的单个元素)以保证拥有许多线程。
您描述的解决方案将起作用,但在您的目标中,您需要使用同步的NSMutableArray来接收匹配的记录。根据匹配率,同步可能会成为瓶颈。
如果您还没有这样做,请通过NSOperationQueue运行这些NSOperations,以便从GCD中受益。
答案 1 :(得分:0)
从我所知道的,你的代码看起来不错。 你的观察目标会有这样的......
- (void) searcherDidFindMatch: (id) match {
[self lazyInitMatchesArray]; // init your NSMutableArray lazily here
@synchronized(_matchesArray) {
[_matchesArray addObject: match];
}
}
答案 2 :(得分:0)
听起来很可疑,你有一个搜索功能,将数组拆分为子数组并在线程中搜索是一个性能获胜。听起来可能需要重新访问您的数据模型。
但是,好吧,它可能会发生。在这种情况下,我将数组拆分为N个部分,并将搜索每个N排入并发队列,使用信号量或类似限制同时发生的搜索#。我会将结果收集到N个数组中,然后在必要时使用NSMutableArray
的{{1}}将它们汇总到一个数组中(这是非常快速的)。