【发布时间】:2013-08-02 22:01:06
【问题描述】:
我一直在多个平台上测试 IOS 应用程序,并在 iPhone 4S 上进行测试时观察到一些奇怪的行为。该应用程序在执行适用于 iPhone 5 和 iPhone 3S 的任务后崩溃。当崩溃发生时,调试器上没有任何显示,Xcode 中绝对不会出现崩溃日志或内存警告。我隔离了代码块以及导致崩溃的特定行。我仍然不明白为什么会这样或如何找到解决方案。该代码是一个更大的方法的一部分,该方法下载许多图像并将它们显示在 UIImageViews 中。代码如下:
//fill image tiles with images
for (int i = 0; i < [objects count]; ++i)
{
PFObject *imageObject = [objects objectAtIndex:i];
PFFile *imageFile = (PFFile *)[imageObject objectForKey:@"image"];
UIImageView *imageHolder = (UIImageView *)[self.view viewWithTag:(100 + i)];
imageHolder.image = [UIImage imageWithData:imageFile.getData];
}
代码循环访问已从服务器加载图像文件的对象。每个图像要分配到的 UIImageViews 标记为 100 - 104,因此可以使用循环索引变量访问它们。 UIImageView *imageHolder = (UIImageView *)[self.view viewWithTag:(100 + i)] 行从主视图中提取 UIImageViews。在下一行中,imageHolder 视图被分配了一个图像,这是导致崩溃的行,并且当注释掉视图时加载不会失败。我无法确定为什么会发生这种情况,或者是否是 imageFile 或 imageHolder 视图设置不正确。也许这里有人可以阐明这个问题。
【问题讨论】:
-
它可能分配了太多内存,操作系统正在终止应用程序而没有警告。最近发生在我身上,没有例外,没有内存警告,它只是终止了。将
imageFile.getData调用分隔到单独的行中,其中变量保存NSData,然后将数据传递给imageWithData。这将有助于找出这两种方法中的哪一种导致了问题。 -
尝试在该循环中添加对
logMemUsage()的调用,代码为here,您可以在循环中看到释放内存的情况。
标签: iphone ios debugging crash