我無法找到錯誤在此代碼:ASIHTTPRequest塊內存泄露
-(void)downloadImageFromURL:(NSURL*)url withCompletionBlock:(RSSMessageImageDownloadCompletionBlock)completionBlock
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
__block RSSMessage *_self = self;
request.completionBlock =
^{
__block NSData *responseData = request.responseData;
dispatch_async(dispatch_get_main_queue(), ^{
_self.image = responseData;
[[[UIApplication sharedApplication] delegate] saveContext];
if(completionBlock != nil)
{
completionBlock();
}
});
};
[request startAsynchronous];
}
在這種形式下,我得到了來自儀器內存泄漏。我假設這是因爲我之前缺少__block關鍵字:ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
但是,當我把這個添加關鍵字上述行我有錯誤,如:
* - [NSConcreteMutableData isNSData__]:消息發送到釋放實例0xdeab380
我不知道如何保留請求數據而不會泄漏內存。
我檢查了__block關鍵字,並且在我的問題中提到了另一個問題(第二部分)。無論我現在得出結論,在dispatch_get_main_queue()中做任何事情都會導致內存泄漏。所以部分是真的,它缺少關鍵字,我會接受你的答案。 – Ertai
如果在ARC下編譯,該示例具有保留週期。 –