Objective C имеет сборщик "мусора" на iPhone?

Я думаю о записи приложения для iPhone. Но я смущен в отношении объективного языка C. Я корректен в высказывании, что я должен сделать свое собственное управление памятью? Действительно ли Objective C является управляемым языком, таким как C# и/или Java?

Спасибо!

5
задан zoul 11 April 2010 в 17:29
поделиться

5 ответов

"Управляемый" - это маркетинговый термин, не имеющий технического смысла. Objective C для iPhone не собирает мусор, а использует управление памятью с сохранением подсчета. Так что в некотором смысле вам придется самостоятельно управлять памятью, но это ограничивается знанием методологии Cocoa retain counting.

Edit: Мои комментарии по поводу "managed" относятся к предыдущей версии сообщения. Комментарий оставлен здесь, потому что я устал видеть это слово.

11
ответ дан 18 December 2019 в 09:48
поделиться

Как отмечали другие, в Objective-C нет сборщика мусора на iPhone, но он есть для Mac OSX. Вот статья, описывающая это более подробно: http://vasudevkamath.blogspot.com/2010/01/objective-c-my-opinions.html

1
ответ дан 18 December 2019 в 09:48
поделиться

Функция сборки мусора отсутствует. Однако для любого объекта, который вы копируете , сохраняете , alloc и т. Д., Его счетчик сохранения увеличивается на единицу, и вы несете ответственность за вызов выпуска. или автозапуск - у вас есть экземпляр этого объекта.Если не вызвать [ release]; или [ autorelease]; , объект останется в памяти iPhone / iPod Touch / iPad, но указатель больше не остается, и происходит утечка памяти, так как этот бит памяти больше не доступен. Автоматическое освобождение добавляет объект в пул автоматического выпуска и означает, что он будет выпущен в какой-то момент в будущем. Всегда используйте стандартный выпуск , где это возможно, поскольку автозапуск означает, что он все еще будет оставаться в памяти устройства в течение некоторого времени, вы никогда не можете быть уверены, когда он будет выпущен, и это чуть более требовательный метод вызова.

Никогда не вызывайте dealloc для объекта - достаточно освобождения или автоматического освобождения, и при необходимости объект будет автоматически освобожден.

Убедитесь, что вы никогда не освобождаете объекты, которыми вы не владеете, и если вы действительно освобождаете объекты, вы освобождаете их после того, как они больше не используются - в противном случае вы можете попытаться получить доступ к этому объекту, и устройство не сможет найти объект, и ситуация приводит к сбою вашего приложения из-за ошибки EXEC_BAC_ACCESS - чтобы выяснить корень проблемы, откройте инструменты, добавьте инструмент распределения объектов и включите обнаружение NSZombie в его настройках (или добавьте Инструмент зомби (доступен только в iPhone SDK 3.2+)). Затем вы можете просмотреть всю историю объекта, вызвавшего проблему, и перейти к той строке кода, которая вызвала проблему.

Подробнее можно прочитать здесь .

Надеюсь, это помогло

4
ответ дан 18 December 2019 в 09:48
поделиться

Вы должны сами управлять памятью с помощью Objective-C на iPhone .

1
ответ дан 18 December 2019 в 09:48
поделиться

Ответ не относится к Objective-C. Если вы занимаетесь разработкой для iPhone, нет ... сборщика мусора нет. Однако, если вы разрабатываете для Mac OSX, есть сборка мусора.

0
ответ дан 18 December 2019 в 09:48
поделиться