Подтвердить что ты не робот

Должен ли я использовать сборку мусора Objective-C при написании для 10.5+?

При написании довольно типичного кода Mac в среде OS X 10.5+, каковы недостатки использования коллекции мусора?

До сих пор все остальное, что я написал, было либо совместимым с 10.4, либо на iPhone, поэтому я стал довольно комфортным с сохранением/выпуском, но теперь, когда я работаю над более крупным проектом, который только 10,5 задаваясь вопросом, есть ли какие-либо недостатки, чтобы просто идти вперед и использовать сборщик мусора Objective-C 2.0.

Что вы, ребята, думаете?

4b9b3361

Ответ 1

Если вы пишете новый код Cocoa и нацеливаете Mac OS X 10.5, используйте мусорную корзину Objective-C.

Если вы пишете какой-то код, который может также понадобиться для запуска на iPhone, вы можете легко и легко написать этот код для обеих моделей, сохранив этот код в отдельной структуре, записав его с помощью свойств -retain и -release используйте и настройте как фреймворк, так и ваш целевой объект unit test для него только с поддержкой GC, а не только с GC.

Xcode будет запускать ваш пакет unit test дважды, один раз с включенным GC и один раз, когда GC выключен, и ваша структура будет использоваться в обеих моделях исполнения. Затем, если вы в конечном итоге захотите принести код модели на iPhone, вы можете поместить его в статическую библиотеку, ориентированную на iPhone, или включить ее прямо в свой проект iPhone.

Независимо от того, планируете ли вы использовать свой код на iPhone, вам обязательно нужно настроить сборку мусора, если вашему приложению потребуется Leopard. Это облегчит разработку, а сборщик мусора Objective-C будет работать неплохо.

Ответ 2

Если есть возможность переносить приложение на iPhone, вы не должны его использовать.

Сбор мусора может оказывать неблагоприятное воздействие на производительность, если у вас есть специальные случаи использования. Без GC у вас есть точный контроль над уничтожением объекта, что не соответствует миру GC. В большинстве проектов стоит включить GC, поскольку он менее подвержен ошибкам и проще.

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

Ответ 3

Я предпочитаю самостоятельно управлять памятью, просто потому, что мне нравится этот уровень контроля. Я знаю по опыту на других языках (С#), что GC не позволяет полностью игнорировать проблемы с памятью и что то же самое в Cocoa с такими вещами, как слабые ссылки и обратные вызовы, использующие (void *), где объект явно не указан принадлежащих другому объекту. Вы в основном торгуете одним набором проблем (утечек памяти) для другого. Лично я не склонны делать слишком много ошибок управления памятью в наши дни, и те, что я делаю, довольно легко отслеживать.

Есть несколько ситуаций (например, внедрение методов источника данных для NSOutlineView, где вы не хотите сохранять объект, предоставляемый в виде схемы), где я думал, что GC будет действительно полезен, но я не знаю, t еще не выполнил никаких реальных тестов.

Apple перечисляет некоторые другие преимущества и недостатки в Руководство по программированию GC.

Ответ 4

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

Управление памятью "вручную" на самом деле очень просто, потому что код управления может в значительной степени учитываться. Моя база кода имеет код < 1%, связанный с управлением памятью, и это больше, чем должно быть. Поэтому я также скептически отношусь к ARC только потому, что проблема, которую он решает, настолько мала, что даже довольно небольшие ошибки с технологией делают ее менее целесообразной.