2014-03-19 34 views
1

我对内存利用问题感到很困惑。加载各种图像(从Parse.com检索)后,我的应用程序崩溃。如何使用'PFImageView'优化内存?

为了使这个更简单我的应用程序包括显示某些类别的图像,所以这就是我所拥有的: 首先给您一个'PFQueryTableView',您选择一个'cell'并将其推送到加载的'ScrollView' 10'PFImageView',当然,在通过图片说出5个以前的单元格后,由于内存压力或内存错误,我的应用程序崩溃。

我使用下面的代码,我认为应该帮助缓存数据,而不是下载的设备:

- (PFQuery *)queryForTable{ 

PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
query.cachePolicy = kPFCachePolicyNetworkOnly; 

return query; 

因为内存持续上升也不会做任何事情,所以我尝试添加自定义缓存设置:

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 

[PFQuery clearAllCachedResults]; 
} 

查看后删除任何数据..但是,当我测试应用程序,使用的内存只是继续上升,每个单元格点击,直到它达到约550 MB,然后崩溃...

我也试过释放我的PFImageViews,但不能,因为我使用ARC和它应该自动执行。 所以我的问题是,我错过了什么?如何在不占用设备内存的难以置信的数量的情况下将其设置为查看图像?

任何帮助将不胜感激!感谢您在阅读时间,如果这真的是一个基本问题,我表示歉意。

+1

如果你不想被拒绝,写出清晰简明的问题将比写作更有助于你不想被拒绝。 –

+0

谢谢,我会编辑该部分。我不得不问,我的问题是否清楚,还是应该编辑? – adriennemhenry

回答

0

kPFCachePolicyNetworkOnly意味着与你看起来相反的情况。这意味着应用程序不应该使用缓存来查询结果,但始终使用网络下载图像。所以,如果您已经在较早的尝试中获取了图像,它现在仍会再次下载图像。

要达到您的意思,请使用kPFCachePolicyCacheThenNetwork。这将强制应用程序首先检查缓存,然后仅在未在缓存中找到时才从解析中获取缓存。

这个设置是为了减少网络使用,而不是内存,所以我怀疑它会为你的内存问题做很多事情。

如果您仍然遇到内存问题,请考虑使用缩小版图像进行浏览,或者实施基于PageViewController的浏览器。

+0

你是对的,没有太多的记忆。我想我会用'UICollectionView'来得到更清晰的结果。谢谢回答! – adriennemhenry

2

发布iOS6,viewDidUnload已弃用。 Docs说:“视图不再在低内存条件下清除,所以这个方法永远不会被调用” - 如果断点出现,我会感到惊讶。

您可以明确设置为nil任何不再需要的对象,使内存得以回收吗?

您可能想切换到连续旋转UIScrollView方案。任何时候你只能加载三张图片;前一个,现在和下一个。

如果向左滑动,“left”变为“current”,“current”变为“right”,“right”丢弃,并加载新的“left”。

如果向右滑动,“右”变为“当前”,“当前”变为“左”,“左”丢弃并且加载新的“右”。

这是old answer我写了关于制作循环视图控制器的更多细节。

+0

感谢您的快速响应!我之前尝试过连续的'UIScrollView',但无法弄清楚如何设置代码,因为我使用的是Parse.com后端,但我会再试一次! – adriennemhenry