3
내 응용 프로그램은 이미지 및 비디오와 같은 데이터가 네트워크를 통해 전송되도록 요구합니다. 그래서 같이, RAM의 허용 가능한 양을 사용하여 작은 조각으로 파일을 분할 관리 : 원래있는 NSData 객체가 26메가바이트 경우NSData의 내용을 활성 메모리에 보관하지 않으려면 어떻게해야합니까?
NSData *data = UIImageJPEGRepresentation([UIImage imageNamed:@"image.jpg"], 1.0);
NSArray *array = [data splitIntoSubdataWithLength:1000000];
-(NSArray *)splitIntoSubdataWithLength:(int)subdataLength {
NSMutableArray *array = [[NSMutableArray alloc] init];
NSUInteger dataLength = [self length];
NSUInteger offset = 0;
do {
NSUInteger thisChunkSize = dataLength - offset > subdataLength ? subdataLength : dataLength - offset;
NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[self bytes] + offset
length:thisChunkSize
freeWhenDone:NO];
offset += thisChunkSize;
[array addObject:chunk];
NSLog(@"chunk size: %i", chunk.length);
} while (offset < dataLength);
return array;
}
문제는, 램이 26메가바이트까지 ~ 간다. NSData 객체의 전체 내용을 이와 같이 메모리에서 활성화해야합니까, 아니면 어떤 식 으로든 메모리 사용을 줄일 수 있습니까?
당신은 읽고 한 번에 파일을 버퍼를 구문 분석,하지만 당신은 오히려 내장 JPG - 투 - 이미지 로직을 사용하는 것보다, 그것을 구문 분석하는 방법을 알아야 줄 수 있습니다. –