Инициализировать NSMutableArray: [массив NSMutableArray];


Если вы инициализируете NSMutableArray с помощью метода удобства NSArray, как указано выше, вы получаете NSArray или NSMutableArray?

Какие-нибудь последствия?

(я знаю, что NSMutableArray имеет " arrayWithCapacity:, мне просто любопытно)

2 7

2 ответа:

Если вы инициализируете его с помощью:

NSMutableArray *array = [NSMutableArray array];

Вы получаете NSMutableArray. Одной из отличительных особенностей Objective-C является то, что методы классов наследуются подклассами.

Итак, в методе класса вы можете сделать что-то вроде этого:

+(id)array {
    return [[[self alloc] init] autorelease];
}

И self будут ссылаться на объект класса, в котором выполняется код (NSArray или NSMutableArray).

Обновление: хотя мой совет "проверить это самостоятельно", как правило, хорошая идея, в этом случае он был немного триггерным. Спасибо Джиму в комментариях за указание на то, что мое предложение ниже не работает хорошо для этих классов, потому что различные формы NSArray все реализованы CoreFoundation toll-free bridging class.

----- Оригинальный Ответ Для Контекста Ниже - - - - -

Самый простой способ ответить на подобный вопрос-это проверить его самому. Попробуйте выделить массив в том виде, который вам был интересен, а затем NSLog из вашего кода:

NSLog (@"мы получили%@", NSStringFromClass ([класс theArray]));