2011-01-02 2 views
0

Я включил сбор мусора в мое приложение для какао. alt textКоллекция мусора из какао не работает?

Почему в моем приложении по-прежнему используется много памяти. На самом деле, это не просто использование большого количества памяти, если я оставлю его работать в течение нескольких часов, это займет несколько гигабайт, что выходит из-под контроля. alt text

Есть ли что-то особенное, что мне нужно сделать, чтобы сделать эту работу?

+1

На скриншоте - вы включили сборку мусора для настройки «отладки». Вы уверены, что не профилируете приложение, скомпилированное с настройкой «release»? – Eimantas

+0

Сбор мусора не означает, что вы не можете иметь утечек памяти. Инструменты должны быть в состоянии показать вам, какие объекты все еще живы. – Eiko

ответ

0

Нет, но есть несколько способов это может произойти:

  1. Вы можете иметь зомби с поддержкой на инструменте распределения или в среде вашей цели. Проверьте оба и убедитесь, что зомби отключены.
  2. Возможно, вы можете отказаться от памяти (удерживая объекты, даже те, которые вы никогда не используете после определенного момента, и никогда не отпускаете их). Это особенно удобно, если вы добавляете объекты в какой-то кеш и никогда не очищаете их от него. (imageNamed: делает это, поэтому будьте осторожны, если вы загружаете много изображений таким образом.) Используйте кучи, чтобы увидеть, какие объекты накапливаются, а затем загляните в их истории, чтобы увидеть, где они были созданы. Также используйте инструмент Object Graph, чтобы узнать, что их поддерживает.

Кроме того, вы подвергаетесь прямому протеканию объектов (возможно, объектов CF, которые по умолчанию не подлежат сбору). Выберите инструмент «Утечки», чтобы увидеть, что он должен сказать.

+0

Я использую «IKImageView» для отображения нового изображения каждые несколько секунд. Изображение загружается в NSImage с помощью «[[NSImage alloc] initWithContentsOfFile: LocalTempImageStorage]» и преобразуется в «CGImageRef» с некоторыми функциями CoreGrahics. Из того, что вы говорите, это звучит как возможный преступник. Каковы мои альтернативы? – Nippysaurus

+0

С помощью функций Core Graphics вы говорите? NSImage на самом деле имеет метод создания CGImage; вы можете использовать это вместо этого. Тем не менее, это все еще просто дикое предположение о причине проблемы; Инструменты скажут вам, что именно вы протекаете, и где вы его создали. –

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