gpt4 book ai didi

iphone - 如何避免将 NSData 的内容保留在事件内存中?

转载 作者:可可西里 更新时间:2023-11-01 05:56:08 26 4
gpt4 key购买 nike

我的应用程序需要通过网络发送图像和视频等数据。我设法使用可接受的 RAM 将文件分成更小的 block ,如下所示:

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 对象的全部内容,或者我是否能够以任何方式减少内存使用量?

最佳答案

您可以使用内存映射文件,并将值临时存储在磁盘上。这是使用 ARC 的 ios 的一个很好的实现。

http://www.cimgf.com/2012/02/17/extending-nsdata-and-not-overriding-dealloc/

关于iphone - 如何避免将 NSData 的内容保留在事件内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com