1

一部の古いデバイス (iPod touch 第 4 世代など) で UI のスタッター/一時停止が発生し、次のコードに絞り込みました。

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

この 2 行のコードをコメントアウトして、代わりに次のようにすると:

NSSet *filteredCats = cats;

パフォーマンスは非常にスムーズです。では、画面の更新で短い一時停止を招くことなく、このフィルタリングを改善するにはどうすればよいでしょうか?

4

1 に答える 1

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]; 
    }
}
于 2013-04-22T17:42:42.227 に答える