Предостережения по подсчету ссылок в Objective-C? - PullRequest
1 голос
/ 05 января 2011

Я давно считал себя снобом мусора - несмотря на тайную любовь к C ++, я начинаю насмехаться над разработчиками, которые активно выбирают языки без (читай: отсутствует ) сборки мусора, когда они 'Мне дали вариант.

И тогда я встретил Objective-C.Вот Это Да!Его система подсчета ссылок кажется невероятно простой - я бы даже сказал, что элегантный .При разработке для OSX разработчикам предоставляется возможность использовать шикарный GC;при разработке для iOS разработчики застряли с подсчетом ссылок.

Мой вопрос:

Если я разрабатываю приложение для OSX, которое может потенциально быть портированным на iOS,Система подсчета ссылок Objective-C достаточно трудоемкая (для разработки и исправления ошибок), чтобы гарантировать игнорирование ее для первой версии приложения?

С какими проблемами я могу столкнуться, если я полагаюсь на подсчет ссылок *, предполагая, что я недостаточно умен, чтобы строить какие-либо дьявольски сложные циклические структуры данных?С такими функциями, как autorelease, все это кажется таким простым, , но я знаю, что Apple не вложила бы усилия в создание сборщика мусора, если бы это действительно было так.Что мне нужно искать?

* Я знаю, что могу использовать сборщик мусора, даже если я выбрасываю retain с и release с (они будут игнорироваться).Тем не менее, учитывая, что приложения, не относящиеся к GC, часто используют RAII , я не понимаю, как это будет работать, если GC поколения "заменит" вызовы retain и release.Не будут ли ресурсы потенциально освобождены поздно?

1 Ответ

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

Мой опыт разработки кода для переноса на iOS заключается в том, что использование только кода GC и обратный перенос его на счетчик ссылок является довольно утомительным и трудоемким процессом и потенциально подвержен ошибкам.Сказав это, до тех пор, пока вы используете свойства (сделайте так, чтобы они сохранялись, даже если это не имеет значения в GC), насколько это возможно, и вы включили фазу сборки статического анализатора, это не так уж плохо.Статический анализатор обнаружит большинство сбоев при соблюдении правил управления памятью.Он не заметит, если вам не удастся выпустить ivar в dealloc, но вы можете пройти и систематически добавлять все методы dealloc.

Имейте в виду, что вы не можете напрямую перенести приложение Mac на iPhoneчасть VC MVC должна быть полностью переписана, чтобы вы могли использовать подход написания интерфейса Mac исключительно для сбора мусора и сделать классы моделей совместимыми только с GC и подсчетом ссылок.

...