The predicate would be something like 
Class ec = [Elephant class];
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"class==%@", ec];
NSArray *elephants = [array filteredArrayUsingPredicate:elePred];
or
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", ec];
I have found predicates to be quite, er.. shall we say "Heavy". I would probably prefer your code to this.
If you are just looking to spice up your life a little you could use blocks to add a little concurrency…
    NSMutableArray *results = [NSMutableArray array];
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
        if([obj isKindOfClass:[Elephant class]])
            [results addObject:obj];
    }];