[英]Instrument (XCode4) report ASIHttpRequest leak memory?
我在XCode 4中獲得了Instrument工具,報告了ASIHttpRequest的內存泄漏...我無法弄清問題,轉而我注釋掉了我所有的代碼以處理結果,並使函數如下所示,但是xcode仍然報告相同的內存泄漏...
每次單擊按鈕時都會調用此方法,每次單擊按鈕時都會看到更多的內存泄漏。 :(
- (void) loadData
{
// no data set, we need to load ourself
NSURL *url = [self getDataUrl];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
////////////////////////////////////////////////////////////////////
// set cache policy
//
// always store data in cache
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
// Always ask the server if there is new content available,
// If the request fails, use data from the cache even if it should have expired.
[request setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
[request setCompletionBlock:^{
NSLog(@"[http request] finishing %@", url);
[self dataDidLoadSuccess];
}];
[request setFailedBlock:^{
NSError *error = [request error];
NSLog(@"[http request]Failed to perform request to %@: %@", url, error);
[self dataDidLoadFail:error];
}];
[request startAsynchronous];
}
從“儀器檢測到的泄漏”(僅一部分)中復制以下內容:
Leaked Object # Address Size Responsible Library Responsible Frame
__NSMallocBlock__,2 < multiple > 64 Bytes UIKit -[UIViewController view]
NSCFString,2 < multiple > 64 Bytes CFNetwork HTTPMessage::parseHeadersFromData()
GeneralBlock-16,2 < multiple > 32 Bytes Foundation -[NSThread main]
NSRecursiveLock,2 < multiple > 160 Bytes Foundation +[NSRecursiveLock allocWithZone:]
NSConcreteMutableData,2 < multiple > 64 Bytes Foundation +[NSMutableData(NSMutableData) allocWithZone:]
__NSArrayM,2 < multiple > 64 Bytes UIKit -[UIViewController view]
__NSMallocBlock__,2 < multiple > 64 Bytes UIKit -[UIViewController view]
__NSArrayM,2 < multiple > 64 Bytes Foundation +[NSHTTPCookie _cf2nsCookies:]
__NSOperationInternal,2 < multiple > 288 Bytes Foundation -[NSOperation init]
NSCFString, 0xb35fdc0 16 Bytes CFNetwork createCapitalizedHeaderString
NSCFString, 0xb35fda0 32 Bytes CFNetwork HTTPMessage::extractResponseStatusLine(unsigned char const*, long)
GeneralBlock-32, 0xb35cd10 32 Bytes CFNetwork HTTPMessage::internalSetHeader(__CFString const*, __CFString const*, long)
__NSCFArray, 0xb35c550 32 Bytes CFNetwork HTTPReadStream::streamEvent(unsigned long)
GeneralBlock-48, 0xb35c520 48 Bytes CFNetwork HTTPReadStream::startRequest(CFStreamError*)
GeneralBlock-16, 0xb35c440 16 Bytes CFNetwork HTTPReadStream::startRequest(CFStreamError*)
__NSCFInputStream, 0xb35c420 32 Bytes CFNetwork HTTPReadStream::startRequest(CFStreamError*)
GeneralBlock-32, 0xb35ba80 32 Bytes CFNetwork HTTPReadStream::constructProxyList(CFStreamError*)
__NSCFArray, 0xb35ba60 32 Bytes CFNetwork HTTPReadStream::constructProxyList(CFStreamError*)
GeneralBlock-48, 0xb35ba10 48 Bytes CFNetwork HTTPMessage::initialize(HTTPMessage*)
CFHTTPMessage, 0xb35b950 80 Bytes CFNetwork HTTPReadStream::streamOpen(__CFReadStream*, CFStreamError*, unsigned char*)
GeneralBlock-48, 0xb35b920 48 Bytes Foundation -[NSThread main]
__NSCFArray, 0xb35b900 32 Bytes CFNetwork HTTPMessage::initialize(HTTPMessage*)
__NSCFArray, 0xb35b8e0 32 Bytes Foundation -[NSThread main]
__NSCFArray, 0xb35b8c0 32 Bytes CFNetwork HTTPReadStream::startRequest(CFStreamError*)
GeneralBlock-48, 0xb35b610 48 Bytes Foundation -[NSThread main]
GeneralBlock-16, 0xb35b5f0 16 Bytes CFNetwork HTTPReadStream::streamSetProperty(__CFReadStream*, __CFString const*, void const*)
GeneralBlock-32, 0xb35b5d0 32 Bytes Foundation -[NSThread main]
GeneralBlock-32, 0xb35b5b0 32 Bytes Foundation -[NSThread main]
NSCFString, 0xb35b590 32 Bytes Foundation -[NSURL(NSURL) host]
GeneralBlock-16, 0xb35b570 16 Bytes CFNetwork HTTPReadStream::streamSetProperty(__CFReadStream*, __CFString const*, void const*)
__NSCFDictionary, 0xb35b540 48 Bytes Foundation -[NSThread main]
__NSCFDictionary, 0xb35b490 48 Bytes CFNetwork
我不確定這是否是您遇到的問題,但請引用http://allseeing-i.com/ASIHTTPRequest/How-to-use#using_blocks :
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
請注意,在我們聲明請求時使用__block限定符,這一點很重要! 它告訴塊不要保留請求,這對於防止保留周期很重要,因為請求將始終保留該塊。
因此,請嘗試添加__block限定符,然后重新測試,看是否仍然存在問題...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.