2011-04-19 78 views
0

实际上,我第一次使用了stackoverflow来搜索我的问题的解决方案。从UIImagePickerController加载图像时,内存字节数增加

问题是我使用的表格视图中,每个单元格中都有一个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上。

我实际上在想的是,如果我为同一个单元格选择图像,而不考虑我做它的次数,应该在文档目录中覆盖图像并且在检入仪器时内存大小不应该增加,但这种情况不会发生。

我对这个问题非常沮丧,所以请任何人帮忙。您的帮助将受到高度赞赏。

回答

0

如果你的内存占用量的增长,你最有可能泄露一些对象,即不释放他们正确。您可以检查仪器和静态分析仪。

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

0

即使你压缩图片,所以它不会在文件中使用磁盘上的存储空间,当你加载它在你的应用程序变得无压缩而且会占用大量的内存取决于应用决议。

-1

尝试检查使用仪器僵尸。有可能导致内存增加的泄漏。还一次又一次地选择图像时使用高速缓存可为您节约一些空间。以释放使用的内存并不需要他们尽快释放对象。