我在为我的应用程序使用乐器时看到了这个问题。当我分析我的应用时,占用的初始内存是 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];
}
为什么内存没有被释放?
答案 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
,除非第一次释放内存。这可以从下图中看出。
我认为你的释放没有任何问题。我认为你只是看错了价值观!
编辑 - 我认为问题可能出在其他地方。要查看我看到的值,您需要做一些改变。如下图所示,您需要取消选中Only track active allocations
选项以查看您要查找的值。如果您仍然在Active allocations
中看到7.41 MB,那么问题就出现了。
答案 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 ;
希望这会对你有所帮助。