Инициализируйте NSMutableArray: [массив NSMutableArray]; - PullRequest
7 голосов
/ 10 мая 2009

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

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

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

Ответы [ 2 ]

11 голосов
/ 10 мая 2009

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

NSMutableArray *array = [NSMutableArray array];

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

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

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

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

4 голосов
/ 10 мая 2009

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

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

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

NSLog (@ "Мы получили% @", NSStringFromClass ([theArray class]));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...