2010-04-13 56 views
1

我有下面的代碼,因爲我已經設置一個計時器下面的代碼一段時間後導致崩潰:的NSMutableArray EXC_BAD_EXCESS SIGBUS

CGImageRef cgImage = UIGetScreenImage(); 
[array addObject:(id)cgImage]; 
CGImageRelease(cgImage); 

哪裏initiallly我已經聲明array爲:

array = [[NSMutableArray alloc] init]; 

由於定時器在10秒內死機時間爲1/10秒,所以定時器進行到10秒鐘。

我認爲該應用程序崩潰,因爲EXC_BAD_EXCESS但不知道如何解決。 任何人都可以幫助解決這個問題嗎?

Thanks in Adv。

+0

你在這行...? 乾淨得到任何警告,重建項目,看看是否有在這一行或沒有任何警示.... – 2010-04-13 11:43:55

+0

不存在任何警告的這條線我正在跑設備,崩潰日誌顯示EXC_BAD_EXCESS – sujyanarayan 2010-04-13 11:53:01

回答

0

addObject:如果對象爲零,將引發異常。試試這個:

array = [[NSMutableArray alloc] initWithCapacity:1]; //designated initializer 
CGImageRef cgImage = UIGetScreenImage(); 
if(cgImage) 
{ 
    [array addObject:cgImage]; 
    CGImageRelease(cgImage); 
} 
+0

我不斷地添加到數組,所以我如何初始化容量爲1。是否有任何其他方式來實現這個邏輯? – sujyanarayan 2010-04-13 13:50:54

+0

1的容量只是初始內存儲備,NSMutableArray將根據需要進行擴展。如果知道分配後不久,您將至少添加十二個對象,然後使用initWithCapacity:12。這個想法是給NSMutableArray合理估計它應該保留的內存量,這不是最大容量。 – 2010-04-19 13:13:55

0

你確定你應該釋放cgImage嗎?

我沒有看到UIGetScreenImage()的文檔,但如果它跟在Create Rule之後,我不希望你需要釋放該對象(因爲該函數的名稱中沒有「Create」或「Copy」 )。

編輯: 因爲我已經發現了幾個references是說,你需要釋放圖像,儘管函數的名稱。 (這顯然已經在3.2 SDK改名UICreateScreenImage()

0

從蘋果開發者論壇UIGetScreenImage():

在您使用此功能,請注意 它返回一個保留CGImageRef 和管理你的內存相應。