我一直在多个平台上测试IOS应用程序,并在iPhone 4S上测试时观察到一些奇怪的行为。在执行适用于iPhone 5和iPhone 3S的任务后,该应用程序崩溃。发生崩溃时,调试器上不显示任何内容,绝对不会在Xcode中出现崩溃日志或内存警告。我隔离了代码块和负责崩溃的特定行。我仍然不明白为什么会发生,或者如何找到解决方案。该代码是下载大量图像并将其显示在UIImageView中的更大方法的一部分。代码如下:IOS - 意外崩溃,无崩溃信息
//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];
}
代码循环遍历一个已经从服务器加载图像文件的对象。每个图像要分配给的UIImageView都被标记为100 - 104,因此可以使用循环索引变量来访问它们。行UIImageView *imageHolder = (UIImageView *)[self.view viewWithTag:(100 + i)]
从主视图中提取UIImageViews。在下一行中,imageHolder视图被分配了一个图像,这是导致崩溃的行,并且在注释时视图加载没有失败。我无法确定这是为什么发生,或者它是没有正确设置的imageFile或imageHolder视图。也许这里的某个人可以解释一下这个问题。
它可以被分配太多的内存和操作系统被终止应用程序没有任何警告。最近发生在我身上的,没有例外,没有记忆警告,它只是终止。将'imageFile.getData'单独调用到一个单独的行上,其中包含一个保存'NSData'的变量,然后将数据传递给'imageWithData'。这将有助于找出哪两种方法导致问题。 – progrmr
尝试在该循环中添加一个对'logMemUsage()'的调用,代码为[here](http://stackoverflow.com/a/2921725/1693173),你可以看到你如何释放内存经过循环。 – progrmr