Со всеми полезными вещами, которые вы получаете от NSArray и NSMutableArray, зачем вам когда-либо использовать массив «C Style» с объектами Objective-C?C массив стилей в Objective-C
NSString *array[] = {@"dog", @"cat", @"boy"};
Со всеми полезными вещами, которые вы получаете от NSArray и NSMutableArray, зачем вам когда-либо использовать массив «C Style» с объектами Objective-C?C массив стилей в Objective-C
NSString *array[] = {@"dog", @"cat", @"boy"};
Для коротких фиксированных массивов доступность симпатичного компактного синтаксиса инициализации (как вы продемонстрировали) может быть приятной. В некоторых случаях массив типов C может также предлагать преимущества производительности по сравнению с использованием NSArray. Еще одна вещь, которая приходит на ум, заключается в том, что NSArray не предлагает встроенной поддержки многомерных массивов, а многомерные массивы C - это просто.
И, конечно же, существует тот факт, что вы можете хранить объекты только в NSArray, а не в C-примитивных типах, но вы конкретно спросили об использовании массивов C с объектами Objective-C.
+1. Эффективность производительности может быть огромной, поскольку компилятор может применять большую оптимизацию, что невозможно сделать при использовании 'NSArray', из-за типичных объектно-ориентированных функций, таких как категории и метод swizzling, которые (теоретически) могут меняться Поведение NSArray. – mvds
Можете ли вы использовать обычный C idiom 'sizeof (array)/sizeof (array [0])', чтобы получить счет? Не могли бы вы использовать 'sizeof (array)/sizeof ([array class])'? – edelaney05
Все полезные вещи приходят по цене.
Когда-нибудь попробуйте сделать NSArray
из ints
? Вы не можете. Вы MUST использование NSNumber
.
Почему? Потому что NSArray
не знает, что делать с вещами, которые он не знает, как управлять памятью ... и единственное, что соответствует его требованиям к управлению памятью, - это вещи, основанные на NSObject
.
Это всего лишь один пример, но есть много других.
Итог, есть редко когда-либо один «лучший» ответ на что угодно. NSArray
не является исключением.
Дальше OT, есть ли мета-обсуждение именно этой проблемы c-tag? Я сам довольно сердитый о вопросах C++ и obj-c, используя тег c. – u0b34a0f6ae