Это зависит от ваших типов объектов, но если их можно использовать в качестве ключей для NSDictionary, я бы создал NSMutableDictionary, который указывает на объекты NSNumber, содержащие счетчики для каждого экземпляра объекта. Что-то вроде:
NSArray *array = whatever;
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:array.count];
for ( id obj in array )
{
NSNumber *number = [d objectForKey:obj];
if ( number == nil )
{
[d setObject:[NSNumber numberWithInt:1] forKey:obj];
}
else
{
[d setObject:[NSNumber numberWithInt:([number intValue]+1) forKey:obj];
}
}
В конце этого кода у вас остается NSDictionary, где ключи - это ваши исходные объекты, а значения - это NSNumbers, которые содержат количество раз, когда ключ существует в оригинале.