Используя NSString как массив NSStrings? - PullRequest
2 голосов
/ 13 января 2012

Я только что натолкнулся на строку кода, которая была написана сотрудником, и я никогда раньше не видел этого в Obj-C. Это выглядит как плохое состояние, и я хочу изменить его, но, похоже, оно работает (приложение работает, как и ожидалось), и я даже не знаю, на что его изменить.

NSString **stringArray= new NSString *[numberOfStrings];

Это нормально? Будет ли NSArray из NSStrings иметь больше смысла?

РЕДАКТИРОВАТЬ: Чтобы правильно освободить массив из памяти, нужны ли какие-либо release вызовы? В настоящее время все, что я вижу, это delete [] stringArray;.

РЕДАКТИРОВАТЬ 2: Кажется, это правильно удалить массив из памяти:

for (int i=0; i < numberOfStrings; i++)
{
    [stringArray[i] release];
}
delete [] stringArray;

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Использование NSArray может быть более разборчивым для кого-либо без фона C, это просто старый старый массив C, заполненный NSString*, совершенно допустимый, но совершенно отличный от экземпляра NSArray.

Оба имеют смысл, но если пользователи этого массива ожидают массива в стиле C, а не экземпляра NSArray, возможно, потребуется много рефакторинга.

3 голосов
/ 13 января 2012

Он использует Objective-C ++ (вы должны убедиться, что в «типе файла» на правой панели для файла в xcode4).

ключевое слово new создает новый массивof (NSString *) с размером numberOfStrings.

Чтобы ответить на ваш вопрос, очень вероятно, что NSArray будет более управляемым, особенно если в коде есть разные разработчики.При использовании массива C ++ могут быть проблемы с производительностью, но это зависит от контекста этого кода.

...