gpt4 book ai didi

ios - 使用 Instruments 追踪内存泄漏 Xcode 5 和 iOS 7

转载 作者:可可西里 更新时间:2023-11-01 05:21:27 26 4
gpt4 key购买 nike

我开发了我的第一个应用程序并且仍在学习中。昨天刚刚更新了 Xcode 5,我的 iPhone 5 运行的是 iOS 7.1。我现在正在努力了解 Instruments 工具来分析我的应用程序。我在 Instruments 中使用 Leak 配置文件,遇到了一个我无法弄清楚的保留周期和泄漏。感谢任何帮助我理解 a) 如何查明错误和 b) 我做错了什么以及将来如何避免它。

在我的应用程序中,我正在使用相机拍照。相机启动时,我轻敲屏幕进行对焦,这时我注意到 Instruments 中出现泄漏。看起来我的代码中没有保留周期(如果我理解正确的话),我的代码中有一个我不理解的根泄漏。

我正在使用 ARC,因此我不必在 Instruments 指向我的那部分代码中发布“选择器”(下面的第 2 部分,带有代码)。

CALayer Retain Cycle

  1. 关于保留周期我能做些什么。它不在我的代码中,但我仍然是它的原因吗?是否源于“根漏”?如果我不对此负责,我应该怎么办?

Root Leak

  1. 我在此堆栈跟踪中的唯一代码无法帮助我了解泄漏的来源。 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];
}

最佳答案

这是我的理论:你遇到的显然是 Apple 自己的代码中的一个错误(或缺陷),你所能做的就是疯狂大笑然后忘记它。

为了检验我的理论,我运行了我自己的代码,这些代码是在不同的时间完全分开编写的。它所做的几乎与您的代码所做的相同:它让用户拍照,然后将图像放入界面。这是我的代码:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch17p702takeAPicture/ch30p962takeAPicture/ViewController.m

我使用 Leaks 工具在 Instruments 下运行我的代码,你猜怎么着?我看到了与您相同的问题。

enter image description here

当然,然后我开始在 Stack Overflow 上搜索,结果发现所有这些都是旧的。例如:

UIImagePickerController memory leak on iOS5

即使是 Apple 自己的示例代码,称为 PhotoPicker(或使用 UIImagePickerController 选择图片和拍照)也有同样的漏洞。

关于ios - 使用 Instruments 追踪内存泄漏 Xcode 5 和 iOS 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com