【发布时间】:2013-03-17 19:44:32
【问题描述】:
我的应用需要通过网络发送图像和视频等数据。我设法使用可接受的 RAM 量将文件分成更小的块,如下所示:
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;
}
问题是,如果原始 NSData 对象为 26MB,则 RAM 会增加到 ~26MB。我是否需要像这样在内存中激活 NSData 对象的全部内容,或者我能以任何方式减少内存使用量?
【问题讨论】:
-
您可以一次读取和解析文件一个缓冲区,但是您需要知道如何解析它,而不是使用内置的 jpg 到图像逻辑。跨度>
标签: iphone ios objective-c memory nsdata