UIImagePickerController不释放它占用的内存

时间:2012-03-12 06:30:54

标签: iphone ios uipickerviewcontroller

我在为我的应用程序使用乐器时看到了这个问题。当我分析我的应用时,占用的初始内存是 563 KB ,这是在UIImagePickerController弹出之前。第一个viewController上有一个按钮,显示UIImagePickerController 只要UIImagePickerController出现,内存占用就会达到 1.6 - 1.7 MB 。如果我选择任何图片或取消UIImagePickerController,则占用的内存仍为 1.6 - 1.7 MB ,我相信应该 563 KB (或者可能是几KB& #39; s more)。
请参阅我使用的以下代码:

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

为什么内存没有被释放?

enter image description here

4 个答案:

答案 0 :(得分:1)

由于您已经给它自动释放选项,它将被添加到自动释放池...查看文档说的内容..

  

Application Kit在主线程上创建一个自动释放池   事件循环的每个循环的开始,并将其排出   结束,从而释放任何生成的自动释放对象   处理事件。

您可以随时在委托调用中释放选择器..

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

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

}

答案 1 :(得分:1)

我们无法在评论中添加图片,因此我将此作为答案。 Live Bytes总是小于Overall Bytes,除非第一次释放内存。这可以从下图中看出。

enter image description here

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

编辑 - 我认为问题可能出在其他地方。要查看我看到的值,您需要做一些改变。如下图所示,您需要取消选中Only track active allocations选项以查看您要查找的值。如果您仍然在Active allocations中看到7.41 MB,那么问题就出现了。

enter image description here

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

您是否已将代理设置为nil

有关详细信息,请参阅UIImagePickerConrtoller class reference

[picker release];
picker.delegate = nil ;

希望这会对你有所帮助。