0

최근에 ARC로 변환 된 업로드 속도 테스트 함수에서 메모리 누수가 발생했습니다. 저는 ARC의 메모리 관리 지침을 준수했다고 생각합니다. 문제는 업로드 테스트를 위해 만든 무작위 데이터가있는 것 같습니다. 그 기억은 해방되지 않는 것 같습니다.ASIHTTPRequest를 사용한 메모리 누수 ARC를 사용하는 appendPostData

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]; 

실제로 데이터를 만드는 함수이고 : I는 업로드 데이터 ASIHTTPRequest 객체를 생성 여기서 여기서
이다

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위한 블록을 설정하는 진행 I 업로드 그래픽 및 업로드 종료 순간을 관리합니다. 코드의 일부는 다음과 같습니다 : 난 그냥 코드의 일부를 게시,하지만 난 블록 내에서 변수 '요청'을 사용하는 경우 보여주고 싶었습니다

[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

나는 문제를 알아 냈다. 그리고 코드를 게시 한 클래스의 부모 클래스와 관련된 유지 사이클이었다. 시스템의이 부분이 나에 의해 쓰여진 것이 아니기 때문에 나는 그것을 놓쳤다. 나는 블록을 사용할 때주기를 유지한다는 경고를 고치고 메모리 누수는 사라졌다.

관련 문제