UIImagePickerController不释放占用的内存

我看到这件事情使用仪器为我的应用程序。 当我分析我的应用程序,最初的内存占用是UIImagePickerControllerpopup之前的563 KB 。 第一个viewController上有一个button,这使得UIImagePickerController出现。
一旦UIImagePickerController出现,内存占用达到1.6 – 1.7 MB 。 如果我select任何图像或取消UIImagePickerController ,占用的内存仍然是1.6 – 1.7 MB ,我相信应该是563 KB (或可能是几KB的更多)。
请参阅我已经使用的下面的代码:

 - (IBAction)chooseButtonPressed:(id)sender { UIImagePickerController *pickerController = [[UIImagePickerController new]autorelease]; [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; [pickerController setDelegate:self]; } 

为什么内存不被释放?

在这里输入图像说明

我们不能将图片添加到评论,所以我把这作为一个答案。 除非首次释放内存,否则Live Bytes总是小于Overall Bytes 。 这可以从下面的图片中看出。

在这里输入图像说明

我认为你的释放没有任何问题。 我想你只是看着错误的价值!

编辑 –我认为这个问题可能在别的地方。 要看到我所看到的价值观,你需要做一点改变。 如下图所示,您需要取消选中“ Only track active allocations以查看要查找的值。 如果在Active allocations仍然看到7.41 MB,那么问题就是另外一回事了。

在这里输入图像说明

既然你已经给它autorelease选项,它会被添加到autorelease池…看到什么文件说..

应用程序工具包在事件循环的每个循环的开始处的主线程上创build一个自动释放池,并在最后消耗它,从而释放处理事件时生成的任何自动释放对象。

你总是可以像这样在委托调用中释放select器。

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ ... ... [picker release]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ .... .... [picker release]; } 

尝试这个

 UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController:picker animated:YES]; [picker release]; 

你把代表设置nil吗?

有关更多信息,请参阅UIImagePickerConrtoller类的引用

 [picker release]; picker.delegate = nil ; 

希望这可以帮助你。