UIImagePickerController不释放占用的内存
我看到这件事情使用仪器为我的应用程序。 当我分析我的应用程序,最初的内存占用是UIImagePickerController
popup之前的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 ;
希望这可以帮助你。