Предикат будет выглядеть примерно так:
Class ec = [Elephant class];
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"class==%@", ec];
NSArray *elephants = [array filteredArrayUsingPredicate:elePred];
или
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", ec];
Я обнаружил, что предикаты довольно ... скажем, "тяжелые". Я бы предпочел ваш код этому.
Если вы просто хотите немного оживить свою жизнь, вы можете использовать блоки, чтобы добавить немного параллелизма ...
NSMutableArray *results = [NSMutableArray array];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
if([obj isKindOfClass:[Elephant class]])
[results addObject:obj];
}];