许多 UIViews 内存不足,无法以单声道触摸方式发布 CGContext?



我是mono/iPhone的新手,我正在开发一个应用程序,该应用程序使用每个页面的UIView查看PDF文档,放置在UIScrollView中。每次我滚动到下一页,只有新的页面+/- 1保留在内存中,其余的刷新(不是uiview,而是PDF页面)。

然而,当在设备上调试时,在翻了足够的页面后,应用程序崩溃了,我可以在应用程序输出中看到我收到了内存警告。

我认为这与在uiview上渲染的位图没有从内存中清除有关,所以经过一些研究,我发现了Objective C中的CGContextRelease()方法——然而,这在MonoTouch中不存在。我能找到的唯一类似的方法是在UIGraphics类中,但那只处理"当前"图形上下文,不管那是什么(我不能将它设置为一个现有的,这是肯定的)。

我如何在UIView中释放图形上下文?这可能吗?我有什么选择?

在释放CGContext实例时自动调用CGContextRelease,或者手动(当调用Dispose时)或当垃圾收集器(GC)运行终结器时。

如果您正在创建自己的CGContext实例,您应该调用Dispose(或使用using)以确保在资源将被释放时控制。否则,GC在收集它们之前可能会花费太长时间,从而导致内存不足的情况。

同样的建议适用于你在应用程序中创建的任何IDisposable实例(即你的问题可能与其他东西有关)。

注意:你重用你的UIView吗?还是移除/处理它们?

最新更新