gpt4 book ai didi

ios - NSData 和 UIImage 未在 iOS7 中发布

转载 作者:行者123 更新时间:2023-11-29 10:41:47 25 4
gpt4 key购买 nike

我在 SQLite 中有一个大表,其中以良好的分辨率存储照片,因此它们的尺寸很大……所以我试图在同一过程中调整这些图像的大小并更新数据库表。我正在使用 FMDB 包装器来处理 SQLite 数据库。

好吧,通过仪器我可以看到 NSData 和 UIImage 没有被释放,内存增长很快,所以它让我的应用程序关闭。

我能做什么?

代码如下:

FMResultSet *aFMResultSet = [database executeQuery:@"SELECT id, image FROM Images WHERE LENGTH(image)> 1000000;" ];

while([aFMResultSet next]){

int aId = [aFMResultSet intForColumn:@"id"];

NSData *aDataImage = [aFMResultSet dataForColumn:@"image"];
UIImage* aImage = [UIImage imageWithData:aDataImage];

UIImage *aResizedImage = [Utils resizedImage:aImage withRect:CGRectMake(0, 0, 324, 242)]; //(2592x1936)/16
NSData *aDataResizedThumbnail = UIImageJPEGRepresentation(aResizedImage,0.5f);

[database executeUpdate:@"UPDATE Images SET image = ? WHERE id = ?;", aDataResizedThumbnail, [NSNumber numberWithInt:aId],nil];

最佳答案

由于循环,系统可能永远没有机会释放不再需要的内存。

要强制系统这样做,请将循环内部包裹在 autoreleasepool 中,如下所示:

FMResultSet *aFMResultSet = [database executeQuery:@"SELECT id, image FROM Images WHERE LENGTH(image)> 1000000;" ];

while([aFMResultSet next]){
int aId = [aFMResultSet intForColumn:@"id"];
@autoreleasepool {
NSData *aDataImage = [aFMResultSet dataForColumn:@"image"];
UIImage* aImage = [UIImage imageWithData:aDataImage];

UIImage *aResizedImage = [Utils resizedImage:aImage withRect:CGRectMake(0, 0, 324, 242)]; //(2592x1936)/16
NSData *aDataResizedThumbnail = UIImageJPEGRepresentation(aResizedImage,0.5f);

[database executeUpdate:@"UPDATE Images SET image = ? WHERE id = ?;", aDataResizedThumbnail, [NSNumber numberWithInt:aId],nil];
}
}

关于ios - NSData 和 UIImage 未在 iOS7 中发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184586/

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