2009-08-25 2 views
0
for (int i=0; i<[images count] ;i++) { 
    [email protected]"http://192.168.0.101/titan/titanimages/"; 
    url=[url stringByAppendingString:[images objectAtIndex:i]]; 
    //NSData *imageData=[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]]; 
    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; 
    destinationPath=[documentsDirectory stringByAppendingString:@"/modelimages"]; 
    destinationPath=[destinationPath stringByAppendingPathComponent:[images objectAtIndex:i]]; 

    [imageData writeToFile:destinationPath atomically:YES]; 

    value=value+divideValue; 
    printf("%f\n",value); 
    [NSThread detachNewThreadSelector:@selector(updateProgressBar)toTarget:self withObject:nil]; 
} 

이 코드는 메모리 누수가 있습니다. NSdata의 메모리를 해제하지 않으며 얼마 후에 응용 프로그램의 메모리 사용량이 61MB에 도달합니다. 아무도 내가이 일에서 빠져 나올 수있게 도와 줄 수 있습니까?메모리 누수 서버에서 데이터 복사

답변

0

100 % 확신 할 수는 없지만 특히 NSData 클래스와 함께 "편의 생성자"를 사용해야 할 것입니다. "dataWithContentsOfURL"을 호출하면 자동으로 자동 릴리스되는 NSData 객체가 반환됩니다. 그러나 현재 NSAutoreleasePool은 응용 프로그램이 종료 될 때까지 해당 메모리가 해제되는 범위에 있지 않을 수 있습니다. 주석 처리 된 alloc/init 호출로 다시 전환하여 루프 안에있는 각 NSData 객체를 수동으로 릴리스하여 루프에 생성 된 NSData의 각 인스턴스에 대해 NSData 메모리가 릴리스되도록 할 수 있습니다 (저장 한 후 NSData를 파일로 저장).