Iphone UIImagePickerController不会释放它所占用的内存
我在我的应用程序中使用仪器时看到了这件事。当我评测我的应用程序时,占用的初始内存是563KB,在弹出Iphone UIImagePickerController不会释放它所占用的内存,iphone,ios,uipickerviewcontroller,Iphone,Ios,Uipickerviewcontroller,我在我的应用程序中使用仪器时看到了这件事。当我评测我的应用程序时,占用的初始内存是563KB,在弹出UIImagePickerController之前。第一个viewController上有一个按钮,用于显示UIImagePickerController。 只要出现UIImagePickerController,占用的内存就会上升到1.6-1.7 MB。如果我选择任何图像或取消UIImagePickerController,则占用的内存仍然是1.6-1.7 MB,我认为应该是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];
}
为什么内存没有被释放
试试这个
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
[picker release];
因为您已经给了它自动释放选项,它将被添加到自动释放池中。。。查看文档中的内容 应用程序工具包在主线程上创建一个自动释放池 事件循环的每个循环的开始,并在 结束,从而释放在 处理事件 您总是可以像这样在委托调用中释放选择器
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
...
...
[picker release];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
....
....
[picker release];
}
您是否将委托设置为
nil
有关更多信息,请参阅
希望这对您有所帮助。我们无法在评论中添加图像,因此我将此作为答案。除非第一次释放内存,否则
活动字节数
始终小于总字节数
。从下图可以看出这一点
我不认为你的交易有什么问题。我想你只是看错了值
编辑-我认为问题可能出在其他地方。要查看我看到的值,您需要做一些更改。如下图所示,您需要取消选中选项仅跟踪活动分配
,以查看您要查找的值。如果在活动分配中仍看到7.41 MB,则问题在于其他方面
否您当时尝试自动释放而不是自动释放释放内存。并且在-(void)imagePickerController:(UIImagePickerController*)中,picker没有用信息完成PickingMediaWithInfo:(NSDictionary*)信息
方法写入[picker dismissModalViewControllerAnimated:YES]代码>你说得很对。你的建议是我最近尝试的。请看我编辑的问题。我添加了一个屏幕截图。活动字节与总字节相同Bytes@Nitish请尝试一下我在编辑中提到的小改动。但是如何取消选中。编辑选项在此不可用。我遇到问题。我是在检查泄漏,而不是仪器的配置。因此,活动字节和总字节的值是相同的。但这有意义吗?只有在分析停止时才能取消选中。你总是可以重新开始。我不知道为什么在检查泄漏时,活动字节和总字节的结果是相同的。可能是因为仅跟踪活动分配
选项也被选中。请检查此项。您是在查看占用的总字节数
还是活动字节数
?由于显而易见的原因,总字节数
将永远不会减少……是的,我正在查看总字节数。但是为什么它不会减少呢?它是所有添加到内存中的字节的盲和。释放内存时,总和不会减少。在总字节
的右侧左侧,必须有一列活动字节
。观察此列中的值,您的问题将得到回答!活动字节和总字节都是相同的。@Maulik:我编辑了答案,并为UIImagePickerController添加了类参考,因为答案出现在低质量Post
@ParthBhatt:谢谢。。。你在哪里找到低质量的帖子???我不知道;D@Maulik它位于查看
部分。我在查看那些低质量的帖子,发现了你的帖子,因此对其进行了编辑。@ParthBhatt:再次感谢……下次我会处理好的……:D@Maulik字体我没有改变你的答案,因为我不能完全改变海报的答案。因为这会给他带来不利影响,有时会给他的声誉带来好处。:)
[picker release];
picker.delegate = nil ;