2013-06-28 3 views
3

iOS에서 우리 애플리케이션은 약 400MB의 zip 파일을 다운로드 중입니다. 파일을 다운로드하는 중에 일시적인 충돌이 발생합니다.iOS : 대용량 파일 다운로드를위한 NSFileHandle 대 NSOutputStream

현재 들어오는 데이터를 쓰기 위해 [NSFileHandle writeData :]를 사용하고 있으며 메모리에 저장되지 않습니다. 하지만 운영 체제가 어떻게 든 메모리에 저장하는지 궁금합니다.

NSOutputStream은 대용량 파일을 다운로드 할 때 더 좋은 솔루션이 될 수 있습니까? 아니면 표준 유닉스 파일 기술자일까요?

우리의 파일 핸들이 같은 설정입니다 :

NSFileManager * fileManager = [NSFileManager defaultManager]; 
[fileManager createFileAtPath:tmpFilePath.path contents:nil attributes:nil]; 
_zipFile = [NSFileHandle fileHandleForWritingAtPath:tmpFilePath.path]; 

현재 내있는 NSURLConnection 위임 방법은 다음과 같습니다 : 그래서 요청에서 제공되는 데이터가 저장하거나 추가되지 않습니다

- (void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data { 
    [_zipFile writeData:data]; 
} 

다른 데이터 개체. 그냥 디스크에 쓰고 메모리에 영향을 미치지 않아야합니까?

감사

+0

정확히 NSOutputStream을 사용하고 잘 작동합니다 (Apple은 [SimpleURLConnections 샘플]에서 보여준 패턴입니다 (http ://)). /developer.apple.com/library/ios/#samplecode/SimpleURLConnections/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009245).)하지만 방금 두 가지 방법으로 시도해 보았습니다. 둘 다 꽤 정중하게 생각됩니다. 소모되는 메모리의 양 (40MB 파일, 다운로드 중에 메모리가 3MB로 급상승했지만 1MB에서 빠르게 평준화 됨). 문제가 다른 곳 (Zombie 또는 다른 것)에서 해결되어야한다고 생각합니다. 어떻게 NSFileHandle이 그 문제는? – Rob

+0

좀비를 사용하고 있습니까? 할당 도구는 무엇을보고합니까? – Rob

+0

이 다운로드는 응용 프로그램에서 발생하는 유일한 것입니다. 나머지 응용 프로그램은 다운로드중인이 zip 파일에 따라 다르므로이 다운로드에 대한 진행률 표시 줄이있는보기 컨트롤러가 하나 있습니다. 인스트루먼트의 어떤 툴을 사용하여 모니터링 할 것을 권장합니까? – gngrwzrd

답변

3

내가 NSFileHandle의 사용에 아무 잘못이 있다고 생각하지 않습니다. 나는 항상 NSOutputStream을 사용했다고 고백하지만, 방금 두 가지 방법 (NSFileHandleNSOutputStream)을 시도했으며, 두 가지 모두 소비 된 메모리 측면에서 정중합니다. 나는 ("할당"와 "누출"를 통해 응용 프로그램을 실행하는 것, 그래서

allocations and leaks

하십시오 40메가바이트 파일을 다운로드의 할당은 1메가바이트에서 평준화 빠르게 다운로드하지만의 시작)에서 3메가바이트에 급등 "Leaks"를 선택하면 두 가지 모두를 얻고 그 모습을 볼 수 있습니다.

정적 분석기 ("제품"메뉴의 "분석")를 통해 코드를 실행하여 문제가 없는지 확인하십시오. (깨끗한 건강 관리표가 있어야하며 문제가보고되면 문제를 해결해야합니다.) 나는 또한 좀비가 꺼져 있는지 확인해야합니다 (출시 된 모든 개체를 추적하는 과정에서,

관련 문제