2011-12-23 3 views
1

Со всеми полезными вещами, которые вы получаете от NSArray и NSMutableArray, зачем вам когда-либо использовать массив «C Style» с объектами Objective-C?C массив стилей в Objective-C

NSString *array[] = {@"dog", @"cat", @"boy"}; 
+0

Дальше OT, есть ли мета-обсуждение именно этой проблемы c-tag? Я сам довольно сердитый о вопросах C++ и obj-c, используя тег c. – u0b34a0f6ae

ответ

5

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

И, конечно же, существует тот факт, что вы можете хранить объекты только в NSArray, а не в C-примитивных типах, но вы конкретно спросили об использовании массивов C с объектами Objective-C.

+0

+1. Эффективность производительности может быть огромной, поскольку компилятор может применять большую оптимизацию, что невозможно сделать при использовании 'NSArray', из-за типичных объектно-ориентированных функций, таких как категории и метод swizzling, которые (теоретически) могут меняться Поведение NSArray. – mvds

+0

Можете ли вы использовать обычный C idiom 'sizeof (array)/sizeof (array [0])', чтобы получить счет? Не могли бы вы использовать 'sizeof (array)/sizeof ([array class])'? – edelaney05

1

Все полезные вещи приходят по цене.

Когда-нибудь попробуйте сделать NSArray из ints? Вы не можете. Вы MUST использование NSNumber.

Почему? Потому что NSArray не знает, что делать с вещами, которые он не знает, как управлять памятью ... и единственное, что соответствует его требованиям к управлению памятью, - это вещи, основанные на NSObject.

Это всего лишь один пример, но есть много других.

Итог, есть редко когда-либо один «лучший» ответ на что угодно. NSArray не является исключением.

Смежные вопросы