2011-01-03 6 views
2

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

Какой бы способ вы ни рекомендовали, любые указатели на соответствующие настройки Xcode были бы полезны. Благодарю.

ответ

4

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

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

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

+0

LLVM rocks! ........... –

+2

С помощью C, однако, OP уже отказывается от этого мелкозернистого управления, которое дает вам написание ассемблером. ;) –

+0

@quixoto Haha :) –

1

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

Это также упростит вам портовые вещи, которые вы пишете на маке. Если вы вернетесь в iOS, это также поможет вам привыкнуть.

Итак, если вы уже занимаетесь управлением памятью, продолжайте это делать!

+2

На самом деле есть определенные приложения, для которых возможность сбора мусора показала небольшое увеличение производительности. См. Статью Майка Эша для немного больше об этом: http://www.mikeash.com/pyblog/perform_better_with_garbage_collection.html –

2

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

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

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

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

Как отмечает Майк Эш в своей статье «Perform Better With Garbage Collection», тот факт, что сборщик мусора работает в фоновом потоке, может привести к небольшим улучшениям производительности в некоторых приложениях на многоядерных компьютерах Mac. Например, он может предотвратить остановки в основном потоке, которые вы иногда видите в плотных циклах, когда пулы автозаполнения сливаются или другие объекты освобождаются.

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

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