我开发了我的第一个应用程序,仍在学习中。昨天刚更新了Xcode 5,我的iPhone 5正在运行iOS 7.1。我现在正在努力理解Instruments工具以分析我的应用程序。我正在使用Instruments中的泄漏配置文件,并遇到了一些保留循环和泄漏问题,但我无法解决。非常感谢您能提供帮助,让我了解a)如何确定错误并b)我犯了什么错误以及如何避免。
在我的应用程序中,我正在使用相机拍照。当相机启动时,我点击屏幕对焦,这时我注意到Instruments中出现了泄漏。看起来在我的代码中没有保留循环(如果我理解得正确),但是却存在一个根泄漏,我不明白。
我正在使用ARC,因此在Instruments指向我代码的部分(下面的第2部分)中,我不需要释放“picker”。
- 如何处理保留循环?它不在我的代码中,但我仍然是原因吗?它是否源于“根泄漏”?如果我不负责,我该怎么办?
- 在此堆栈跟踪中,我的唯一代码不能帮助我理解泄漏的来源。Instruments指向的行是我的代码中的[picker dismissViewControllerAnimated:YES completion:nil];在我的imagePickerController:didFinishPickingMediaWithInfo:方法中。我将代码复制如下。
- (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];
}
UIImagePickerController
的代码? - Austin