7

我在为我的应用程序使用工具时看到了这个东西。当我分析我的应用程序时,在弹出之前占用的初始内存为563 KB 。UIImagePickerController第一个 viewController 上有一个按钮,可以UIImagePickerController显示。
UIImagePickerController出现,占用的内存就高达1.6 - 1.7 MB。如果我选择任何图像或取消UIImagePickerController,占用的内存仍然是1.6 - 1.7 MB,我认为应该是563 KB(或者可能更多 KB)。
请参阅我使用的以下代码:

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

为什么内存没有被释放?

在此处输入图像描述

4

4 回答 4

1

既然你给了它自动释放选项,它就会被添加到自动释放池中……看看文档怎么说……

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

你总是可以像这样在委托调用中释放选择器..

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

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

}
于 2012-03-12T06:45:17.193 回答
1

我们无法在评论中添加图像,所以我将其作为答案。在第一次释放内存之前,Live Bytes它们总是小于例外。Overall Bytes这可以从下图看出。

在此处输入图像描述

我不认为你的释放有什么问题。我认为您只是在查看错误的值!

编辑-我认为问题可能出在其他地方。要查看我看到的值,您需要进行一些更改。如下图所示,您需要取消选中该选项Only track active allocations才能查看您要查找的值。如果您仍然在 中看到 7.41 MB Active allocations,则问题出在其他问题上。

在此处输入图像描述

于 2012-03-12T08:51:55.753 回答
0

试试这个

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
[picker release];
于 2012-03-12T06:35:14.710 回答
0

您是否将委托设置为nil

更多信息可以参考UIImagePickerConrtoller 类参考

[picker release];
picker.delegate = nil ;

希望这对您有所帮助。

于 2012-03-12T07:13:15.583 回答