Что точно действительно ли так называемый “Класс является Кластером” в Objective C?

Возможно, что рекурсия будет более дорогой, в зависимости от того, если рекурсивная функция будет хвост, рекурсивный (последняя строка является рекурсивным вызовом). Хвостовая рекурсия должна быть распознанной компилятором и оптимизированной к его повторяющемуся дубликату (при поддержании краткой, четкой реализации, которую Вы имеете в своем коде).

я записал бы алгоритм в пути, который имеет большую часть смысла и является самым ясным для бедного сосунка (быть им самостоятельно или кто-то еще), который должен поддержать код через несколько месяцев или лет. Если Вы сталкиваетесь с проблемами производительности, то представляете Ваш код, и затем и только тогда изучаете оптимизацию путем отодвижения к повторяющейся реализации. Можно хотеть изучить memoization и динамическое программирование .

89
задан Nikolai Ruhe 10 December 2013 в 09:08
поделиться

4 ответа

Из документации Apple ... . Короче говоря, это шаблон проектирования, используемый в структуре Foundation, и, вероятно, поэтому он не упоминается в книгах по ObjC.

Кластер классов - это архитектура, которая группирует ряд частных конкретных подклассов в рамках общедоступного абстрактного суперкласса. Группировка классов таким образом обеспечивает упрощенный интерфейс для пользователя, который видит только общедоступную архитектуру.

40
ответ дан 24 November 2019 в 07:10
поделиться

Кластер класса NSArray не является «тяжеловесным», это способ использования любого количества реализаций класса массива без ведома вашего кода или заботы о конкретной реализации. Под капотом есть конкретные подклассы NSArray, которые подходят для различных вариантов использования, таких как большие разреженные массивы или массивы, содержащие определенное количество элементов, которые известны во время компиляции.

NSArray, NSString и NSNumber - это кластеры классов, с которыми вы чаще всего сталкиваетесь.

7
ответ дан 24 November 2019 в 07:10
поделиться

Из программирования в цели c Стивена Кочана на странице 498 в глоссарии, кластер:

Абстрактный класс, который группирует набор частные конкретные подклассы, обеспечивающие упрощенный интерфейс для пользователя через абстрактный класс.

25
ответ дан 24 November 2019 в 07:10
поделиться

Я не знаю, что написано в 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
192
ответ дан 24 November 2019 в 07:10
поделиться