我一直在多個平臺上測試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