Итак, я создаю приложение для iPhone в Objective-C и вам нужно использовать массив. Обычно в Objective-C я использую NSArray или NSMutableArray, но я начинаю задаваться вопросом, является ли это лучшей идеей при простом использовании базового массива. Имеет ли смысл использовать память и эффективность в использовании обычного массива C или массива Objective-C, просто сохраняя базовый массив пользовательских объектов? И обычно вы используете C-массивы или массивы Objective-C при программировании в Objective-C? Благодаря!C/C++ vs Objective-C Array
ответ
Это действительно зависит от того, что вы хотите сделать с массивом.
Для массивов чисел, которые вы собираетесь делать много математики, C-массивы, вероятно, лучший выбор (или, по крайней мере, класс, который обертывает C-массивы). Если вы постоянно конвертируете между скалярами и объектами и не используете какие-либо более продвинутые функции NSArray, все, что вы купите, это много накладных расходов.
Однако объекты Cocoa имеют ряд инвариантов управления памятью, которые вы должны соблюдать, или ваше приложение будет работать. C-массивы и векторы C++ будут блаженно игнорировать эти требования, что означает гораздо большую работу для вас, чтобы держать их в очереди. NSArray позаботится об этом для вас. Когда вы имеете дело с объектами Cocoa, используйте NSArray.
Спасибо, что ответил на мой вопрос.Думаю, я просто использую классы Cocoa в этой ситуации. Тем не менее, я вижу, откуда вы пришли, когда выполняете математику на массивах, и я буду помнить об этом, когда делаю что-то подобное. –
NSArray и NSMutableArray являются достаточно эффективными. Если производительность пока не является проблемой для вас, нет никаких оснований для того, чтобы скомбинировать себя с использованием простых массивов C, когда объекты Objective-C были бы более естественными - если производительность становится проблемой позже, тогда вы можете оптимизировать ее больше.
Когда в Риме.
Используйте NSArray или NSMutableArray при разработке приложений для iPhone, поскольку это идиоматическая задача.
Если у вас нет особых причин использовать простые старые массивы c, придерживайтесь идиоматического подхода.
Если я не нашел повод для не их использовать, NSArray
- это мой де-факто выбор.
И в течение нескольких лет программирования Cocoa я никогда не нашел повода, чтобы не использовать его. Единственное, что мне удалось придумать, - это то, что тогда вещи, которые я хочу хранить в массиве, не являются объектами, или я хочу хранить объекты, но не сохранять их. Однако в обоих случаях простой способ CFMutableArrayRef
с настраиваемыми обратными вызовами делает трюк.
Объективные массивы C (NSArray, et.al.) крайне неэффективны, если вы пытаетесь использовать их для обработки выборок многоканальных аудио и/или необработанных пикселей в реальном времени видео в реальном времени, бит, который вы нужно прикасаться к порядку много миллионов раз в секунду. Обычные C массивы данных, изложенные в некоторых каналах информации о кеше данных, гораздо более уместны и, вероятно, будут использовать гораздо меньше памяти и мощности батареи для любой значительной обработки.
Обратите внимание, что вы не можете даже подавать NSArrays в инфраструктуру Accelerate и большую часть Core Audio, Core Graphics или Open GL API.
Для данных, которые вы редко слышите, скажем, со скоростью всего в несколько тысяч раз в секунду или меньше, массивы Objective C помогут с управлением памятью и абстракцией данных, возможно, без ущерба для времени и памяти, которые легко измеримы. Полезно для пользовательских данных, элементов пользовательского интерфейса, таблиц пользовательского интерфейса и других очень медленных вещей, которые происходят только в просто темпах человека.
- 1. ObjectiveC Sorting Array
- 2. Swift: import ObjectiveC vs Foundation
- 3. Array Indices vs Array Elements
- 4. 2D Array vs Jagged array?
- 5. Java Array vs Scala Array
- 6. String vs byte array array
- 7. Subtract Array vs Add Array
- 8. $ data = array() vs unset ($ array)
- 9. Php array vs Python array
- 10. объект vs array, {} vs [], echo vs print_r
- 11. Animate CC - getChildByName canvas vs WebGL
- 12. C++ 11 std :: array vs static array vs std :: vector
- 13. collection item() vs array []
- 14. Erlang array vs list
- 15. Array forEach() vs reduce()
- 16. stl vector vs array
- 17. XML vs Array Performance
- 18. Array Vs Strings JAVA
- 19. Array vs ArrayList
- 20. dereference vs array access
- 21. strlen pointer vs array
- 22. Swift - Set vs Array
- 23. Rails: model vs. array
- 24. Array vs Integer
- 25. C++ Array vs vector
- 26. Vector vs Array Performance
- 27. HashTable vs. Array
- 28. NSArray vs array
- 29. Значительные различия в Array vs Array List?
- 30. bool array vs bit array в C
+1 Я думаю об этом, когда хочу массив массивов, например. Преобразование в NSNumber и из него - боль и, вероятно, неэффективность. – PengOne