0

我一直在上傳speedtest功能,最近已轉換爲ARC內存泄漏。我相信我遵守了ARC的內存管理指南。 這個問題似乎與我爲上傳測試創建的隨機數據一樣。它的記憶似乎沒有被釋放。
這裏是我創建上傳數據和ASIHTTPRequest對象:使用ASIHTTPRequest的內存泄漏appendPostData與ARC

ASIHTTPRequest *request0 = [ASIHTTPRequest requestWithURL:uploadTestURL]; 
__weak ASIHTTPRequest *request = request0; 

NSData *uploadData ; 
if ([speedTier isEqualToString:@"Wifi"]) { 
    uploadData = [self createRandomNSDataOfSize:1000000]; 
}else 
{ 
    uploadData = [self createRandomNSDataOfSize:4000000]; 
} 

[request appendPostData:uploadData]; 

實際創建數據的功能是:

NSMutableData* theData = [NSMutableData dataWithCapacity:size]; 
for(unsigned int i = 0 ; i < size/4 ; ++i) 
{ 
    u_int32_t randomBits = arc4random(); 
    [theData appendBytes:(void*)&randomBits length:4]; 
} 
return theData; 

然後我繼續設置了塊setBytesSentBlock,我在那裏管理上傳圖片和上傳終止時刻。一些代碼低於:

[request0 setBytesSentBlock:^(unsigned long long size, unsigned long long total) { 

    double timeDiffereceFromStart = [[NSDate date] timeIntervalSinceDate:start]; 

    if (totalUploadSize == 0) 
    { 
     start=[NSDate date]; 
     totalUploadSize = [request.postBody length]; 
     return; 
    } 
    if(startPosition == 0 && timeDiffereceFromStart >= 1)//[request totalBytesSent] > 20000) 
    { 
     startPosition = [request totalBytesSent]; 
     start=[NSDate date]; 
     return; 
    } 

我剛剛張貼一些代碼,而是想表明,我使用的塊中的變量「請求」。我很確定我在這裏修復了通告保留問題,但我想確保沒有其他問題。

其他的事情我應該注意 - 我已經在ASIHTTPRequest dealloc函數中設置了一個斷點。我創建的這個類型的所有對象都會觸發dealloc斷點。所以他們都被正確地釋放了。但是我不明白爲什麼內存使用會在它上傳函數時繼續上升。 謝謝!

+0

查看接受的答案[這個問題](http://stackoverflow.com/questions/8375508/why-are-my-asihttprequest-files-showing-arc-errors) – Niraj

+0

嗨Niraj,你的意思是我應該轉而使用AFNetworking?這個問題是由我的ARC代碼和不是ARC的ASIHTTPRequest之間的交互引起的嗎? – user3121003

+0

你在哪裏看到內存增加?調試導航儀還是儀器? – Putz1103

回答

0

我已經發現了這個問題,它是一個保留週期,涉及我發佈代碼的類的父類。因爲系統的這部分不是不是我寫的,我錯過了它。我最終修復了使用塊時指出保留週期的警告,並且內存泄漏消失了。