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

我已经发现了这个问题,它是一个保留周期,涉及我发布代码的类的父类。因为系统的这部分不是不是我写的,我错过了它。我最终修复了使用块时指出保留周期的警告,并且内存泄漏消失了。