从UIImagePickerController加载图像时,内存以字节为单位

时间:2011-04-19 13:57:15

标签: iphone

实际上我是第一次使用stackoverflow来搜索我的问题的解决方案。

问题在于我使用的是一个表视图,其中每个单元格中都有一个ImageView来显示一个选定的图像,一个按钮可以打开图像选择控制器,并允许用户从图库或相机中选择图像。从库中选择图像后,我使用了函数

NSData *imageData=UIImageJPEGRepresentation(image2, .4);

将其转换为数据以减少图像的内存大小,然后将其保存在文档目录中,最后重新加载表。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png",currentCameraRow]];


    if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath])
    {
        NSLog(@"file is exiting and starting");
        if ([[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil]) {
            NSLog(@"file is exiting and deleting");

        }

    }

否则我将图像保存在文档目录中并重新加载UITable。

重新加载表格后,图像应显示在单元格的ImageView中。

现在的问题是,如果我再次为同一个单元格选择图像并在单击相机按钮后加载它,图像将会出现,但内存也会增加.15MB,我在仪器上检查了这使我的应用程序在iPhone 3上崩溃。

我实际上在考虑的是,如果我选择相同单元格的图像而不管我执行它的次数,则应该在文档目录中覆盖图像,并且当我签入时内存大小不应该增加仪器,但这没有发生。

我对这个问题感到非常沮丧,所以请任何人帮忙。我们将非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果您的内存占用增长,您很可能会泄漏某些对象,即不能正确释放它们。您可以使用仪器和静态分析仪进行检查。

请注意,压缩图像会减少加载时消耗的内存。这只是pixels_width * pixels_height * 4个字节。

答案 1 :(得分:0)

即使您压缩图像,因此它不会在文件中的磁盘上占用太多存储空间,当您在应用程序中加载它时,它会变得未压缩,并且会占用相当大的内存量,具体取决于解析度。

答案 2 :(得分:-1)

尝试使用乐器检查僵尸。可能存在泄漏导致内存增加。同时使用缓存可能会在一次又一次地选择图像时节省一些空间。不需要时立即释放对象以释放使用的内存。