В настоящее время я работаю над симулятором Game of Life от Conway для iPhone, и у меня было несколько вопросов об управлении памятью. Обратите внимание, что я использую ARC.
Для моего приложения мне понадобится большое количество C-стиля structs
или объектов Objective-C для представления ячеек. Там может быть несколько тысяч из них, поэтому очевидно, что управление памятью пришло в голову.
Structs
Мой аргумент для структур заключается в том, что ячейки не нуждаются в типичных свойствах OO. Единственное, что они будут удерживать, это два значения BOOL
, поэтому не будет огромного количества памяти, разжеванной этими ячейками. Кроме того, мне нужно использовать двумерный массив. С structs я могу использовать 2-мерные массивы C-style. Насколько я знаю, в Objective-C нет замены для этого. Я чувствую, что слишком сложно создать объект только для двух булевых значений.
Объекты Objective-C Моим аргументом (и большинством других людей) является то, что управление памятью вокруг объектов Objective-C очень просто и эффективно с ARC. Кроме того, я видел аргументы, что struct
не является таким большим уменьшением памяти для объекта.
C-Struct vs Object
Итак, мой вопрос. Должен ли я пойти со старой школой, постным и совместимым с двумерным массивом structs
? Или я должен придерживаться типичных объектов Objective-C и рисковать дополнительной памятью.
Последующие мысли: если вы рекомендуете объекты Objective-C, предоставьте альтернативный метод хранения, который представляет собой двумерный массив. Это очень важно и является одним из самых больших недостатков в работе с объектами Objective-C.
Thankyou.
Просто используйте битподы целого числа, которое вы можете обернуть этим с помощью NSNumber, чтобы вести себя как объект объектива-c. и слово совета. Руководящие линии Apple - это то, что вы должны придерживаться самого высокого уровня абстракции и только если вы столкнетесь с проблемой производительности, оптимизирующей или возвращающейся на более низкий уровень. Беспокойство о производительности перед тем, как попробовать, может иногда тратить много времени на мой честный опыт. – nsuinteger
@nsuinteger Затем я теряю двумерные массивы, когда я завершаю класс objc. Это одно из преимуществ использования примитивных, 2-мерных массивов. –
+1 и шляпы от вас, чтобы задать вопрос и рассмотреть компромиссы, независимо. Мои мысли в ответе ниже. -RP – RobP