gpt4 book ai didi

objective-c - Apple CameraUI 代码的内存泄漏

转载 作者:行者123 更新时间:2023-11-29 13:37:30 24 4
gpt4 key购买 nike

我使用了 Apple 的“iOS 相机编程主题”指南中的一些代码,如下所示:

UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;

// Displays a control that allows the user to only take picture:
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];

// Hides the controls for moving & scaling pictures, or for trimming movies. To instead show the controls, use YES.
cameraUI.allowsEditing = NO;

cameraUI.delegate = delegate;

[controller presentModalViewController: cameraUI animated: YES];
[cameraUI release];

但是,当我“分析”我的代码时,Xcode 说我有一个潜在的泄漏来自以下行:

cameraUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];

除上面显示的命令外,我没有其他release 命令。鉴于所讨论的数组是 cameraUI 的一个属性(已发布),我不确定我应该做什么(如果有的话)。

有什么想法吗?

最佳答案

除非 cameraUI.mediaTypes 属性是用 assign 定义的,否则这里确实存在漏洞。将行分成多个步骤可能会有所帮助,仅供引用。

NSArray* mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
cameraUI.mediaTypes = mediaTypes;

如果 cameraUI 负责处理自己的内存,那么您分配什么或何时分配都无关紧要。但是,在第一行中,您正在构建一个变量但从未释放它。那么,你如何解决这个问题?修复它的标准方法是在构造期间自动释放。

cameraUI.mediaTypes = [[[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil] autorelease];

如果您正在处理必须尽快释放的非常大的对象,则需要在将其传递给 cameraUI 后手动释放它:

NSArray* mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
cameraUI.mediaTypes = mediaTypes;
[mediaTypes release];

仅在需要时使用第二种形式 - 它更容易出错。

关于objective-c - Apple CameraUI 代码的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162522/

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