Не хватает памяти со многими UIViews, не можете выпустить CGContext в моно Touch? - PullRequest
2 голосов
/ 25 октября 2011

Я новичок в mono / iPhone и разрабатываю приложение, которое просматривает PDF-документ, используя UIView для каждой страницы, помещенной в UIScrollView. Каждый раз, когда я прокручиваю до следующей страницы, в памяти сохраняется только новая страница +/- 1, остальные очищаются (не UIViews, а страницы PDF).

Однако при отладке на устройстве после пролистывания достаточного количества страниц происходит сбой приложения, и в выводе приложения я вижу, что я получил предупреждения о памяти.

Я предполагаю, что это связано с тем, что растровые изображения, отображаемые на UIViews, не удаляются из памяти, поэтому после некоторых исследований я обнаружил метод CGContextRelease () в Objective C - однако его нет в MonoTouch. Единственный подобный метод, который я смог найти, был в классе UIGraphics, но он имеет дело только с «текущим» графическим контекстом, каким бы он ни был (я не могу установить его в существующий, это точно).

Итак, как мне выпустить графический контекст в UIView? Это вообще возможно? Какие у меня варианты? Надеюсь, кто-нибудь может помочь, это сводит меня с ума ..

1 Ответ

3 голосов
/ 25 октября 2011

CGContextRelease вызывается автоматически при освобождении экземпляра CGContext, либо вручную (когда вызывается Dispose), либо когда сборщик мусора (GC) запускает финализатор.

Если вы создаетесвои CGContext экземпляры, которые вы должны вызывать Dispose (или использовать using), чтобы гарантировать, что вы контролируете , когда ресурсы будут освобождены.В противном случае сборщик мусора может занять слишком много времени, прежде чем собирать их, что приведет к нехватке памяти.

То же самое относится и к любому экземпляру IDisposable, который вы создаете в своем приложении (т.е. ваша проблема может быть связана счто-то еще).

Примечание: вы повторно используете свой UIView?или удаление / удаление их?(это тоже вероятный кандидат)

...