Вопрос по arrays, objective-c – Добавление целого числа в NSMutableArray

13

Я нигде не мог найти это, поэтому я просто прошу убедиться. И да, я знаю, что это за основа, но я думаю, что предпочел бы сделать это правильно, прежде чем совершу ошибку миллион раз:

Если я сделаю следующее, приведёт ли он «0» к NSNumber по умолчанию (если нет, какой это тип объекта), или мне придется делать второй код?

(Или оба они могут быть неправильными из-за того, что я пытаюсь сделать. Если это так, дайте мне знать. Они оба компилируются, поэтому мне просто интересно, какой из них «правильный» (или предпочтительный) и почему.)

Код 1:

<code>NSMutableArray array = [[[NSMutableArray alloc] init]];
[array addObject: 0];
</code>

Код 2:

<code>NSMutableArray array = [[NSMutableArray alloc] init];
[array addObject: [NSNumber numberWithInt: 0]];
</code>

Ваш Ответ

3   ответа
21

NSMutableArray не принимает примитив, е печатает.

Второй вариант верен.

ОК, круто. Спасибо!! Я отмечу это как правильный ответ в ближайшее время (он говорит, что я должен ждать 10 минут, чтобы принять ответ на этот вопрос) MrHappyAsthma
Я счастлив, что смог помочь. Daniel Bidulock
Какой идентификатор у меня есть переменная, чтобы добавить iOS Developer
6

int вNSArray; вы должны построитьNSNumber экземпляр, чтобы держать его.

Если я сделаю следующее, он по умолчанию преобразует «0» в NSNumber (если нет, какой это тип объекта)

Нет кастинга. Невозможно просто «привести» примитив в объект, и у этого примитива нет типа объекта. Объекты должны быть созданы путем отправки сообщений (кроме: см. Ниже), что происходит во время выполнения; приведение влияет только во время компиляции.

Единственная причина, по которой это работает, в том, что ты выбрал0 добавить в массив. Это то же значение, что иnil, что означает «нет объекта». Если бы вы выбрали любое другое целое число, у вас возникнет сбой при запуске кода, поскольку это значение будет использоваться в качестве указателя на память, в которой нет действительного объекта.

Интересно, что, начиная с Clang 3.1 или Apple LLVM 4.0, * есть какой-то новый синтетический сахар для создания объектов из литералов в коде. У нас всегда был буквальныйNSStrings: @"Lichtenstein". С новым компилятором другие объекты также могут быть созданы с помощью@ персонаж

В этом случае, чтобы создатьNSNumber объект из буквального целого числа, вы можете просто написать:

[array addObject:@0];

* (пока недоступно в публичном Xcode)

0

id type) для контейнерных классов, таких какNSArray.

Один класс, который может быть полезен в этом контексте, этоNSValue, который служит контейнером для необъектных типов данных C и target-C. В дополнение к числовым типам данных, он также может содержать структуры и некоторые примитивные типы данных Objective C, такие какNSRect.

Смотрите здесь для более подробной информации:https: //developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsvalue_Class/Reference/Reference.htm

Похожие вопросы