Возможно, что рекурсия будет более дорогой, в зависимости от того, если рекурсивная функция будет хвост, рекурсивный (последняя строка является рекурсивным вызовом). Хвостовая рекурсия должна быть распознанной компилятором и оптимизированной к его повторяющемуся дубликату (при поддержании краткой, четкой реализации, которую Вы имеете в своем коде).
я записал бы алгоритм в пути, который имеет большую часть смысла и является самым ясным для бедного сосунка (быть им самостоятельно или кто-то еще), который должен поддержать код через несколько месяцев или лет. Если Вы сталкиваетесь с проблемами производительности, то представляете Ваш код, и затем и только тогда изучаете оптимизацию путем отодвижения к повторяющейся реализации. Можно хотеть изучить memoization и динамическое программирование .
Из документации Apple ... . Короче говоря, это шаблон проектирования, используемый в структуре Foundation, и, вероятно, поэтому он не упоминается в книгах по ObjC.
Кластер классов - это архитектура, которая группирует ряд частных конкретных подклассов в рамках общедоступного абстрактного суперкласса. Группировка классов таким образом обеспечивает упрощенный интерфейс для пользователя, который видит только общедоступную архитектуру.
Кластер класса NSArray не является «тяжеловесным», это способ использования любого количества реализаций класса массива без ведома вашего кода или заботы о конкретной реализации. Под капотом есть конкретные подклассы NSArray, которые подходят для различных вариантов использования, таких как большие разреженные массивы или массивы, содержащие определенное количество элементов, которые известны во время компиляции.
NSArray, NSString и NSNumber - это кластеры классов, с которыми вы чаще всего сталкиваетесь.
Из программирования в цели c Стивена Кочана на странице 498 в глоссарии, кластер:
Абстрактный класс, который группирует набор частные конкретные подклассы, обеспечивающие упрощенный интерфейс для пользователя через абстрактный класс.
Я не знаю, что написано в CDP, на который ссылается Стив, но в основном кластер классов Objective-C - это конструкция, которая поддерживает реализацию абстрактного шаблона Factory.
Идея идеи проста: Вы хотите предоставить интерфейс Factory (Cluster), который, при минимальном описании, производит и возвращает конкретный экземпляр объекта Factory Object, удовлетворяющий поведению семейства кластеров, описанному интерфейсом Factory (Cluster).
Простой конкретный пример: Этот пример предоставляет фабрику Laugh, которая производит конкретные классы определенных типов смеха (например, Guffaw, Giggle). Обратите внимание на метод Laugh initWithLaughter:.
In Laugh.h:
#define kLaughWithGuffaw 1
#define kLaughWithGiggle 2
@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end
In Laugh.m:
@interface Guffaws:Laugh {}
- (void) laugh;
@end
@interface Giggles:Laugh {}
- (void) laugh;
@end
@implementation Laugh
- (Laugh *) initWithLaughter:(NSUInteger) laugherType {
id instanceReturn=nil;
; // Removed for ARC [self release]
if ( laughterType == kLaughWithGuffaw )
instanceReturn = [[Guffaws alloc]init];
else if( laughterType == kLaughWithGiggle )
instanceReturn = [[Giggles alloc]init];
else
; // deal with this
return instanceReturn;
}
- (void) laugh {
NSLog(@"Humbug");
}
@end
@implementation Guffaws
- (void) laugh {
NSLog(@"OH HA HA HOWAH HA HA HA");
}
@end
@implementation Giggles
- (void) laugh {
NSLog(@"Tee hee");
}
@end