2013-03-27 1 views
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 객체의 전체 내용을 이와 같이 메모리에서 활성화해야합니까, 아니면 어떤 식 으로든 메모리 사용을 줄일 수 있습니까?

+0

당신은 읽고 한 번에 파일을 버퍼를 구문 분석,하지만 당신은 오히려 내장 JPG - 투 - 이미지 로직을 사용하는 것보다, 그것을 구문 분석하는 방법을 알아야 줄 수 있습니다. –

답변

관련 문제