0
我試過所有的東西來調試這個,但是我無法得到它的底部。在圖形上下文中調試NSoperation BAD ACCESS
此代碼住在其被從隊列中進行處理的NSOperation的子類:
(邊界是含有5個UIImage的對象的NSArray一個的ivar)
NSMutableArray *images = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < 5; i++)
{
CGSize size = CGSizeMake(60, 60);
UIGraphicsBeginImageContext(size);
CGPoint thumbPoint = CGPointMake(6, 6);
[controller.image drawAtPoint:thumbPoint];
CGPoint borderPoint = CGPointMake(0, 0);
[[borders objectAtIndex:i] drawAtPoint:borderPoint];
[images addObject:UIGraphicsGetImageFromCurrentImageContext()];
UIGraphicsEndImageContext();
}
[images release];
代碼工作大多數時候都很好,但是當我通過訪問子視圖按下iphone並按下UI上的很多按鈕時,我會得到此操作捕獲的異常:
Exception Load view: *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil
或我得到這個:
Program received signal: 「EXC_BAD_ACCESS」.
的異常造成的,因爲UIGraphicsGetImageFromCurrentImageContext()返回零。
我不知道如何調試EXC_BAD_ACCESS,但我猜這個錯誤(實際上這兩個錯誤)是由低內存引起的。調試器停止在該行:
[controller.image drawAtPoint:thumbPoint];
正如我所說,我被困例外,所以我可以忍受,但EXC_BAD_ACCESS更嚴重。
如果這是與內存相關的問題,我該如何判斷並且可以增加NSOperation的可用內存?
它在後臺線程上(好的隊列在主線程上處理,但操作在後臺運行),代碼工作時間爲90%,只有當我開始敲擊失敗的UI時纔會工作。爲什麼我不能在背景線上做圖形上下文? – Joe 2010-03-22 18:29:38
CoreGraphics調用通常可以,但UI調用(例如'UIGraphicsBeginImageContext')通常只能從主線程調用。我沒有更詳細的細節,但你可能會在這裏獲得更多信息:http://www.iphonedevsdk.com/forum/iphone-sdk-development/13963-background-threads-graphics.html – philsquared 2010-03-22 18:34:08
如果你可以重鑄你的使用'CGBitmapContext'的代碼你可能會解決你的問題。 – philsquared 2010-03-22 18:37:55