портирование iOS-приложения на Mac - как управлять управлением памятью? - PullRequest
2 голосов
/ 03 января 2011

Конечно, в моем коде есть все вызовы сохранения / разблокировки. , , Возможно ли будет проще написать приложение для Mac с сборкой мусора (и что мне делать с сохранением / выпуском) или без?

Какой бы способ вы ни рекомендовали, любые указатели относительно соответствующих настроек XCode были бы полезны. Спасибо.

Ответы [ 3 ]

4 голосов
/ 03 января 2011

Я настоятельно рекомендую вам , а не использовать GC на Mac по разным причинам, просто придерживайтесь того, что вы уже привыкли делать.Я полагаю, что когда вы полагаетесь на GC для управления памятью, вы отказываетесь от большого детального контроля, что лично мне не нравится.

Поскольку вы уже пришли из среды с подсчетом ссылокКак и iOS, я думаю, что было бы мудро с вашей стороны остаться в этой среде, учитывая, что в этот момент вам не потребуется гораздо больше усилий с вашей стороны.

Вам потребуется портировать контроллеры вида иоснованный на представлении код для Cocoa, но это не должно быть слишком сложным.Вы можете оставить свои модели, потому что они не имеют каких-либо зависимостей вида.(конечно, при условии, что вы сделали это с унцией здравомыслия).

2 голосов
/ 04 января 2011

Я собираюсь с уважением не согласиться со всеми, кто до сих пор ответил, и сказать вам, чтобы вы не отказались от немедленной отмены сборки мусора на Mac. Все мои приложения Mac используют сборку мусора, и все новые приложения, которые я создаю, будут это делать.

Там, где сборка мусора спасла меня, огромное количество проблем связано с многопоточным кодом. Я считаю себя достаточно здравым, когда дело доходит до управления памятью, но крайние случаи, связанные с выпуском и автоматическим выпуском между потоками, приводили к случайным сбоям в огромной части программного обеспечения управления робототехникой, пока я не преобразовал его в сборщик мусора. Впоследствии все эти проблемы исчезли, что привело к гораздо большей стабильности в целом (я работал в течение шести месяцев, не видя сбоя в одной из более свежих версий).

Если вы разрабатываете код, который будет использоваться совместно с Mac и iOS, обязательно пишите, следуя стандартным правилам управления памятью, чтобы сохранить свои хорошие привычки и гарантировать, что вещи можно копировать и вставлять туда и обратно. Затем вы можете включить сборку мусора как параметр времени сборки в версии для Mac, чтобы он действовал как защитная сеть для тех случаев, когда вы пропустили утечку или перепродавку. Вы не будете экономить на коде таким образом, но это может улучшить стабильность вашего приложения при развертывании у ваших пользователей.

Тем не менее, существуют определенные среды, такие как Core Image, которые плохо работают со сборщиком мусора, поэтому, если вы используете одну из них в своем приложении, вам может понадобиться избегать GC.

Как отмечает Майк Эш в своей статье " Лучше выполнять сборку мусора ", тот факт, что сборщик мусора работает в фоновом потоке, может привести к небольшому повышению производительности в некоторых приложениях на многоядерных компьютерах Mac. Например, он может предотвратить остановки в главном потоке, которые вы иногда видите в тесных циклах, когда пулы авто-выпуска истощаются или освобождаются другие объекты.

Наконец, мне нравится тестировать мой кроссплатформенный код Какао в сборщике мусора, чтобы определить, куда я поместил код очистки, не связанный с памятью, в -dealloc (где он на самом деле не принадлежит), потому что -dealloc нет дольше вызывается под сборкой мусора. Это помогает мне лучше проектировать мой код.

1 голос
/ 03 января 2011

Держите это так, как есть. Неиспользование GC позволит ему работать на Mac намного быстрее. Это также дает вам гораздо больший контроль над тем, когда что-то остается, а когда - и, возможно, в конечном итоге даст вам более стабильное приложение.

Кроме того, вам будет проще переносить вещи, которые вы пишете на Mac, обратно. Если вы вернетесь на iOS, это также сохранит вашу привычку.

Короче говоря, если вы уже занимаетесь управлением памятью, продолжайте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...