На вопрос, что я не имею в виду, не означает «почему, черт возьми, они не сделали сбор мусора доступным для какао-арта тоже». как происходит, что Cocoa Touch не имеет GC, а Objective-C - с версии 2.0. Разве это не зависит от языка?Почему коллекция мусора доступна в Objective C 2.0, но не в Cocoa Touch
ответ
Вы действительно не спрашиваете, почему коллекция мусора недоступна на iOS. Скорее, вы спрашиваете , как сбор мусора иногда может быть доступен на языке, а иногда нет.
На одном уровне ответ прост. Apple просто не включила сборщик мусора в среду выполнения для iOS. В принципе, есть код, который работает на Mac, который реализует сборку мусора. Этот код отсутствует в iOS. Сам компилятор, вероятно, несколько отличается, но это всего лишь вопрос наличия кода в компиляторе, который говорит: if(COMPILING_TO_GC)
В основном, Apple делает это, компилируя по-разному и предоставляя другое время выполнения.
На более философском уровне, действительно ли это тот же язык? Вы можете утверждать, что Objective-C для iOS - это не тот же язык, что и Objective-C для Mac. Отсутствие сбора мусора в iOS делает семантику языка существенно различной. Таким образом, вы можете рассматривать его как два разных языка, которые выглядят очень похожими, но имеют тонкую смысловую семантику.
На практическом уровне различия между языками облегчаются с внедрением автоматического подсчета опорных точек (ARC). Это автоматически управляет памятью, используя подсчет ссылок. Эффект заключается в том, что iOS имеет слабую форму сбора мусора. В результате семантика отличается еще большей тонкостью.
Начиная с ios 5 (и от 4.3 до точки) Cocoa Touch имеет автоматический подсчет ссылок. В основном, компилятор делает для вас материал релиза, если вы этого желаете. Но нет, это не зависит от языка, который он зависит от платформы.
Причина, по которой Apple не использовала Mac GC, довольно проста: на устройствах ios не так много памяти, а Mac GC не так хорош, как некоторые другие, например Java.
На стороне примечания: У меня легко реагировать почти на дрожащую реакцию WTF на модель управления памятью iOS, но у разработчика есть много силы/контроля, который хорошо ее изучает и является имхо хорошим способом для введения в проблемы управления памятью, которые возникают вместе с программированием на C и нижнем уровне.
Я согласен с этим, мне также нравится управлять управлением памятью –
- 1. Доступ к Objective-C/Cocoa Touch Arrays
- 2. Класс Swift в Cocoa Touch Objective-C Framework
- 3. Cocoa, XCode, Objective-C
- 4. Почему макросы в Objective-C/Cocoa?
- 5. Округление поплавка до ближайшего 0.5 в Objective C/Cocoa Touch
- 6. В чем разница между Cocoa Touch и Objective C
- 7. Java BufferedImage equivelent в Objective C/Cocoa Touch?
- 8. Пустая корзина для мусора через Objective-C/Cocoa
- 9. Cocoa Touch Framework: константы
- 10. Почему коллекция мусора так медленно?
- 11. Кнопка переключения не работает в Cocoa-Touch
- 12. ListView в Objective-C Cocoa
- 13. Собирает ли сборщик мусора Objective-C 2.0 C структур?
- 14. Cocoa Objective-C, добавляющий subviews
- 15. Cocoa и Objective-C++
- 16. Делегаты против событий в Cocoa Touch
- 17. Objective-C мусора
- 18. Cocoa Objective-C INIT странность
- 19. Динамические UIViews в Obj-c + Cocoa touch
- 20. Сбор мусора Objective-C и C++
- 21. Objective-C 2.0 не работает в GNUstep
- 22. JAVA мусора Коллекция
- 23. Cocoa Touch Framework не распознан
- 24. Почему UISlider медленно обновляет значение в Cocoa-Touch?
- 25. Коллекция мусора Android в Lunar Lander
- 26. Для цикла пропускается в Cocoa Touch
- 27. Рисование пикселей - Objective-C/Cocoa
- 28. Обработка сообщения Cocoa setAction в Objective-C++
- 29. Objective-C/Cocoa bridge в PHP?
- 30. Почему UITableViewController не должен управлять частью окна в Cocoa Touch?
Благодарим вас за хорошее объяснение. –