2011-12-28 1 views
2

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

ответ

1

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

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

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

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

+0

Благодарим вас за хорошее объяснение. –

1

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

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

На стороне примечания: У меня легко реагировать почти на дрожащую реакцию WTF на модель управления памятью iOS, но у разработчика есть много силы/контроля, который хорошо ее изучает и является имхо хорошим способом для введения в проблемы управления памятью, которые возникают вместе с программированием на C и нижнем уровне.

+0

Я согласен с этим, мне также нравится управлять управлением памятью –

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