我在iPad2上测试一个内存压力很大的应用程序。 我正在循环中创建一系列pdf页面并在Xcode中调试我看到内存在增长。
我已经实现了应用程序和控制器相关的函数(didReceiveMemoryWarnings,applicationReceivedMemoryWarnings)并在开始循环之前添加了一个观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMemoryWarning:) name: UIApplicationDidReceiveMemoryWarningNotification object:nil];
问题#1: 这些方法永远不会被调用,应用程序会被Xcode以“内存压力”通知终止。 我错过任何触发器吗?在系统决定关闭应用程序之前,我怎么能错过警告?
问题#2: pdf上下文不断增加,有没有办法检查字节大小? (例如,NSData变量不是太大,大约6MB,但Xcode中的内存显示> 200MBytes ....我该如何测量?)
我计划在内存警告出现时将数据刷新到磁盘......但不是警告...: - (
感谢!!!
答案 0 :(得分:1)
创建过程中不要将PDF保留在内存中,然后尝试刷新。相反,使用CGPDFContextCreateWithURL
以便只创建“当前”页面在内存中,并且每次创建新页面时,数据都会被推送到磁盘。这样可以将内存使用量降至最低。
至于没有收到通知,如果您的PDF生成在主线程上同步运行,那么通知将永远不会发布(它只是等待队列处理)。