2013-04-22 67 views
1

我得到一个UI口吃/暂停在一些较老的设备(iPod Touch的例如第4代),我已经将范围缩小到这段代码:的iOS - 过滤集性能谓语

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"gender != %@ && catId != %@", [NSNumber numberWithInt:0], [NSNumber numberWithInt:7]]; 
NSSet *filteredCats = [cats filteredSetUsingPredicate:predicate]; //cats is an NSSet 

如果我注释掉这些代码两行,做这个:

NSSet *filteredCats = cats; 

的表现非常流畅。那么如何改进这个过滤而不会导致屏幕更新中的短暂停顿?

回答

2

你可以做你的过滤异步,这应该与性能方面提供帮助:

__weak ViewController *bSelf = self; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul),^{ 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"gender != %@ && catId != %@", [NSNumber numberWithInt:0], [NSNumber numberWithInt:7]]; 

    NSSet *filteredCats = [cats filteredSetUsingPredicate:predicate]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [bSelf updateMyViewWithFilteredSet:filteredCats]; 
    } 
} 
+1

只是为了让你知道,你用dispatch_sync主queue..it可以产生死锁。 – 2014-04-21 10:35:21

+0

已更新。谢谢。 – JonahGabriel 2014-04-21 17:21:08

+0

没问题;).. – 2014-04-21 21:23:55