3 memory iphone memory-management uiimage
我正在编写一个应用程序,需要同时在内存中保存大约44 kb的JPEG.我听说应用程序在触发低内存警告之前可以使用大约22兆字节,所以我很确定它应该能够做到这一点.但是,一旦我传入一个兆字节的加载,这些消息就会在控制台中弹出:
Mon Jun 8 16:37:19 unknown configd[21] : kernel memory event (90), free: 374, active: 1736, inactive: 959, purgeable: 0, wired: 6260 Mon Jun 8 16:37:20 unknown configd[21] : kernel memory event (95), free: 363, active: 876, inactive: 492, purgeable: 0, wired: 6241 Mon Jun 8 16:37:20 unknown SpringBoard[22] : Memory level is critical (5%). No apps to kill. Will kill SpringBoard Mon Jun 8 16:37:24 unknown SpringBoard[22] : Jetsaming SpringBoard...
然后它将我转回主屏幕.
这是我用来加载图片的代码:
#define NUM_IMAGES 40
@interface MyClass : NSObject {
UIImageView* imageView;
UIImage* loadedImages[NUM_IMAGES];
}
- (void)initImages;
@property (nonatomic, retain) IBOutlet UIImageView* imageView;
@end
@implementation MyClass
@synthesize imageView;
- (void)initImages {
int i;
for (i = 0; i < NUM_IMAGES; i++) {
loadedImages[i] = [UIImage imageNamed:[NSString stringWithFormat:IMAGE_FORMAT, i+1]];
}
imageView.image = loadedImages[0];
}
@end
Run Code Online (Sandbox Code Playgroud)
我有什么问题吗?iPhone应用程序真的只能使用一兆字节的内存吗?
Joe*_*oey 15
当您加载压缩图像(例如JPEG图像)时,它通常会被解压缩(因为这是需要完成的操作,以便您可以对图像执行一些有用的操作,例如显示或操作它).
未压缩的图像肯定会大于JPEG格式的压缩图像所占的44 KiB (大约3或4个字节乘以宽度和高度).因此,只要查看JPEG大小,就会比你想象的更快地耗尽内存.
如果你真的只需要将JPEG保存在内存中(并且不对它们执行任何操作,只需按住它们),您可以考虑将原始字节流存储在内存中,然后仅在您真正需要时才将其加载为图像.
但是根据您的需要,可能还有其他选择.你真的需要一次内存中的所有图像吗?您是否可以推迟加载单个图像直到需要(并在那时卸载其他图像)以节省内存?您是否只需要从每个可以缓存的图像中获取某些信息(之后您将不再需要图像本身)?等......
归档时间: |
|
查看次数: |
749 次 |
最近记录: |