[ Игнорировать: Предикаты только быстрее в Core Data - techzen]
Вот более быстрый и быстрый способ сделать это:
NSArray *fromPlist=[NSArray arrayWithContentsOfFile:@"my.plist"];
NSPredicate *exPred=[NSPredicate predicateWithFormat:@"imageFilePath==%@",@"exclamation.png"];
// NSNumber *exclamationCount=[[fromPlist filteredArrayUsingPredicate:exPred].@count];
NSNumber *exclamationCount=[[[fromPlist filteredArrayUsingPredicate:exPred] valueForKey:@"@count"]];
В последней строке написано: указать массиву fromPlist вернуть другой массив, состоящий из объектов, соответствующих тесту предиката.Затем возьмите счетчик возвращенного массива.
Это намного быстрее (10>), чем цикл, особенно для больших массивов.Более того, ваш предикат может быть произвольно сложным, т. Е. Вы можете тестировать несколько атрибутов разными способами в каждом предикате.Вы также можете сохранить предикаты и использовать их повторно, даже если они содержат переменные.
Сочетание кодирования ключ-значение, операторов сбора, например, @count, и предикатов является чрезвычайно мощным.Умение правильно их использовать открывает огромные улучшения в скорости, надежности и гибкости.