2011-04-28 99 views
6

我使用AVAssetImageGenerator從動畫片段中獲取圖片而不用播放它。現在我有一個問題如何在處理程序的循環中設置變量? 這可能嗎? 我收到這個錯誤信息,不知道這是什麼意思。 (谷歌>沒有結果)。AVAssetImageGeneratorCompletionHandler - 如何設置或返回變量?

「變量不分配(缺少 __block類型說明符)」

所以我要在這裏問pro's。 這是代碼。我想保存或返回我生成的imageData,所以我可以刪除下面的處理程序中的「setImage」消息。

UIImage* thumbImg = [[UIImage alloc] init]; 

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) 
{ 
    if (result != AVAssetImageGeneratorSucceeded) 
    { 
     NSLog(@"couldn't generate thumbnail, error:%@", error); 
    } 
    [button setImage:[UIImage imageWithCGImage:im] forState:UIControlStateNormal]; 
    thumbImg = [[UIImage imageWithCGImage:im] retain]; 
    [generator release]; 
}; 

對於瞭解這一點很有幫助。 謝謝你的時間。

回答

21

首先看起來你不需要初始化你的thumbImg,當它的聲明 - 在那一行創建的UIImage對象將被覆蓋在塊中並且會泄漏。只需以零值初始化它即可。

在你的代碼中的實際問題是你要改變塊的變量應該用__block說明符聲明(如錯誤消息所示)。所以你的1s線應該是

__block UIImage* thumbImg = nil; 
+0

很酷,謝謝你!祝你今天愉快。 – geforce 2011-04-29 07:44:35

+0

不客氣:) – Vladimir 2011-04-29 07:45:15

+0

感謝您的偉大答案!我可否知道__block在這種情況下會產生什麼影響?我記得它與保留的記憶有關。 – Zhen 2011-06-21 01:46:27