Почему Сборка мусора доступна в Objective C 2.0, но не в Cocoa Touch - PullRequest
2 голосов
/ 28 декабря 2011

Под вопросом, который я, конечно же, не имею в виду «почему, черт возьми, они не сделали сборку мусора доступной и для прикосновения какао». Скорее, я хочу понять, как получилось, что у Cocoa Touch нет GC, пока Objective-C делает с момента выпуска 2.0. Разве это не зависит только от языка?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Вы на самом деле не спрашиваете, почему Сборка мусора недоступна на iOS. Скорее, вы спрашиваете , как сборка мусора иногда может быть доступна на языке, а иногда нет.

На одном уровне ответ прост. Apple просто не включила сборщик мусора в среду выполнения для iOS. По сути, на Mac есть код, который реализует сборку мусора. Этот код "отсутствует" на iOS. Сам компилятор, вероятно, несколько отличается, но это просто вопрос наличия кода в компиляторе, который говорит: if(COMPILING_TO_GC) По сути, Apple делает это, компилируя по-другому и предоставляя другое время выполнения.

На более философском уровне это действительно один и тот же язык? Вы можете утверждать, что Objective-C для iOS - это не тот же язык, что и Objective-C для Mac. Отсутствие сборки мусора в iOS существенно отличает семантику языка. Таким образом, вы можете рассматривать его как два разных языка, которые выглядят очень похожими, но имеют слегка различную семантику.

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

1 голос
/ 28 декабря 2011

Начиная с ios 5 (и 4.3 до точки) Cocoa Touch имеет автоматический подсчет ссылок. По сути, компилятор делает то, что вам нужно. Но нет, это не зависит от языка, это зависит от платформы.

Причина, по которой Apple не использовала Mac GC, довольно проста: на устройствах ios не так много памяти, а Mac GC не так хорош, как некоторые другие, например, Java '.

С другой стороны: я знаю, что реакция WTF на дерзкую реакцию на модель управления памятью iOS довольно проста, но для разработчика, который хорошо его изучает, есть много возможностей и контроля, и это ИМХО хороший способ познакомиться с проблемами управления памятью, которые идут вместе с программированием на C и более низком уровне.

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