최근에 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 중단 점에 도달합니다. 그래서 그들은 모두 제대로 해방되고 있습니다. 하지만 왜 메모리 사용량이 업로드 기능에 부딪 힐 때 계속 올라가는지 이해할 수 없습니다. 감사합니다.
[이 질문에 대한 대답을 볼 수] 참조 http://stackoverflow.com/questions/8375508/why-are-my-asihttprequest-files-showing-arc-errors) – Niraj
안녕 Niraj, 당신은 내가 대신 AFNetworking으로 이동해야합니까? 이 문제는 내 ARC 코드와 ARC가 아닌 ASIHTTPRequest 사이의 상호 작용 때문에 발생합니까? – user3121003
메모리 증가는 어디에서 볼 수 있습니까? 디버그 또는 악기에서 디버그 하시겠습니까? – Putz1103