我开发了我的第一个应用程序并仍在学习。刚刚更新了Xcode 5,我的iPhone 5正在运行iOS 7.1。我现在正致力于理解“仪器”工具来分析我的应用程序。我正在使用仪器中的泄漏配置文件,并且遇到了一个我无法弄清楚的保留周期和泄漏。感谢我能理解的任何帮助a)如何查明错误和b)我做错了什么以及将来如何避免它。
在我的应用程序中,我正在使用相机拍摄照片。当相机启动时,我轻触屏幕进行对焦,这时我注意到仪器中出现了泄漏。看起来我的代码中没有保留周期(如果我理解正确)和我的代码中的根漏洞,我不明白。
我正在使用 ARC ,所以我不应该在我指向的代码部分发布“picker”(下面的第2部分,带代码)。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *pickerImage = [info objectForKey: UIImagePickerControllerOriginalImage]; _imageView.image = pickerImage; [picker dismissViewControllerAnimated:YES completion:nil]; // <--- mem-leak }
编辑 - 我创建UIImagePickerController的代码。
- (IBAction)snapPicture:(id)sender { UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; // If the camera button was tapped AND we have a camera, use it... if ((sender == _cameraButton) && [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera]; } else { [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; } imagePicker.delegate = self; // bring up the image picker view [self presentViewController:imagePicker animated:YES completion:nil]; }
答案 0 :(得分:7)
这是我的理论:你遇到的问题显然是苹果公司自己的代码中的一个错误(或缺陷),你所能做的只是疯狂地笑,而忘了它。
为了测试我的理论,我运行了自己的代码,在不同的时间单独编写。它与您的代码几乎完全相同:它允许用户拍照,并将图像放入界面。这是我的代码:
我使用Leaks仪器在Instruments下运行我的代码,然后猜猜是什么?我看到你遇到了同样的问题。
当然,我开始在Stack Overflow上搜索,所有这些都证明是旧的。例如:
UIImagePickerController memory leak on iOS5
即使Apple自己的示例代码,称为PhotoPicker(或使用UIImagePickerController来选择图片和拍照)也有同样的泄漏。