Есть ли в Objective-C сборщик мусора на iPhone? - PullRequest
5 голосов
/ 11 апреля 2010

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

Спасибо!

Ответы [ 5 ]

11 голосов
/ 11 апреля 2010

«Управляемый» - это маркетинговый термин, не имеющий технического значения.Задача C для iPhone не является сборщиком мусора, но использует управление подсчетом сохранения.Таким образом, в некотором смысле вы должны сами управлять памятью, но это ограничено знанием методологии подсчета удержания какао .

Редактировать: мои комментарии к «управляемому» относятся к предыдущая версия сообщения .Комментарий оставлен здесь, потому что я устал видеть слово.

4 голосов
/ 12 апреля 2010

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

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

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

Вы можете прочитать больше здесь .

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

1 голос
/ 11 апреля 2010

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

1 голос
/ 11 апреля 2010

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

0 голосов
/ 11 апреля 2010

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

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