Нужно ли еще изучать управление памятью сейчас, когда в Objective-C / Cocoa есть сборщик мусора? - PullRequest
8 голосов
/ 19 декабря 2008

Так что я, наконец, стёр свои книги по Objective-C / Cocoa ... оказывается, им почти 7 лет! В Objective-C 2.0 теперь есть сборка мусора, насколько важны главы по управлению памятью?

Какую разницу имеет сборщик мусора?

Ответы [ 6 ]

9 голосов
/ 20 декабря 2008

Управление памятью все еще очень важно понимать. Если вы ориентируетесь на более старую ОС, вам нужно управлять памятью. Если вы используете старую библиотеку, вам нужно управлять памятью. Если вы перейдете на базовый базовый уровень, вам (может или не может) понадобиться управление памятью.

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

Сборщик мусора в Objective-C является выдающимся - и если вы можете его использовать, вы определенно должны это делать - но он пока не охватывает все ситуации программирования.

3 голосов
/ 20 декабря 2008

Если вы программируете платформу iPhone, вам нужно знать, сохранить / выпустить, потому что у Cocoa Touch нет GC.

Если вы собираетесь использовать Core Foundation, Core Graphics, большинство Core Services или любой другой API на основе CF, вам нужно знать, сохранять / освобождать, потому что производные от CF объекты по умолчанию не считываются GC ( и в любом случае вы должны явно выставить их на погрузку).

Если вы собираетесь использовать любой из API-интерфейсов POSIX или любой из остальных базовых сервисов, вам необходимо знать, как распределять / освобождать управление памятью. Вы даже не получаете подсчет ссылок. (Исключение: Icon Services, в которых также есть подсчет ссылок. API, порожденные Carbon, - беспорядок.)

Итак, одним словом: Да.

3 голосов
/ 20 декабря 2008

Некоторые технологии Какао, такие как распределенные объекты, плагины PyObjC (мост Python-Objective-C) и CoreImage (по крайней мере, последнее, что я слышал; возможно, это было исправлено) плохо работают с сборкой мусора. Если вы используете эти технологии, вам все равно придется использовать традиционное управление памятью. Конечно, как уже говорили другие, вам все еще нужно использовать традиционное управление памятью Какао (подсчет ссылок), если вы поддерживаете OS X 10.4 или iPhone в своем коде.

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

Поскольку многие сторонние фреймворки могут еще не поддерживать GC, вероятно, лучше все-таки понять систему подсчета ссылок. Если вы следуете простым правилам владения объектами, приведенным в руководстве по управлению памятью Apple 1006, у вас всегда должно быть все в порядке.

2 голосов
/ 20 декабря 2008

Вероятно, стоит узнать о концепциях, лежащих в основе управления памятью Какао, поскольку это все еще полезно в определенных ситуациях. Например, iPhone OS не поддерживает сборку мусора. Могут быть и другие ситуации, когда выгодно использовать ручное управление памятью, и полезно иметь возможность сделать этот выбор

2 голосов
/ 20 декабря 2008

Это зависит. Если вы планируете игнорировать 10.4 пользователей, то вам может не беспокоиться об этом; но Objective-C 2.0 недоступен в версиях 10.4 и ниже, поэтому вам все равно придется беспокоиться об управлении памятью на этих платформах.

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

1 голос
/ 21 декабря 2008

Понимание превосходных концепций управления памятью Cocoa поможет вам с концепцией управления памятью в целом. Я скопировал концепцию автоматического выпуска в несколько проектов C ++, и она отлично работала. Apache и Subversion являются примерами другого программного обеспечения, которое также использует autorelease.

Лично я считаю retain / release / autorelease как раз для меня подходящим уровнем абстракции. Это не волшебство, поэтому, если мне действительно нужно сделать что-то странное, это легко сделать. С другой стороны, правила настолько просты, что становятся второй натурой до такой степени, что в конечном итоге вы просто больше не думаете об управлении памятью, это просто работает.

Добавьте к этому тот факт, что, как упомянуто выше, только большая часть Какао поддерживает сборку мусора, а то, что вы пишете, - это С, так что любой код, который вы пишете и / или используете, но не Какао, должен управляться вручную. , Это включает в себя CoreAudio, CoreGraphics и т. Д.

(Да, объекты CF работают с GC, но только если вы явно включили его для каждого объекта, и мне было сложно изучить правила GC-CF)

Подводя итог: я никогда не использую сборщик мусора сам (и единственный раз, когда я делал это, это было очень больно, поскольку у меня было немного C ++ и CG в миксе), и, насколько я знаю, большинство кодировщиков Какао очень используется для сохранения / выпуска / автоматического выпуска и использования этого.

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