gpt4 book ai didi

objective-c - 使用带有 ARC 的 Xcode 的对象的潜在泄漏

转载 作者:行者123 更新时间:2023-12-02 08:42:55 24 4
gpt4 key购买 nike

我在 Xcode 4.5.2 中有一个应用程序,我正在使用 ARC。我的应用程序一直在构建和运行,没有编译器警告或错误,但是,当应用程序进入后台然后返回前台时(特别是在两者之间经过了很长一段时间之后),应用程序崩溃了。我是 iOS 的新手,我一直在不断地尝试分析崩溃报告,并用符号表示崩溃,但到目前为止,我一直没有成功地收集到问题的任何线索。然而,当我重新打开我的项目时,突然之间,一行代码(一直存在)现在显示一个蓝色编译器警告:Memory (Core Foundation/Objective C) Potential Leak of an Object。 我不明白为什么这段代码在使用ARC的上下文中会产生这个警告,也不明白为什么它会突然出现。我假设这可能与崩溃问题有关,但我不知道为什么会收到此错误,因此我不知道如何修复它。

这里是问题所在的代码:

- (void) cropPhoto:(UIImage *)originalImage inImageView:(UIImageView *)imageView atXPoint:(int)x atYPoint:(int)y withWidthSize:(int)width withHeightSize:(int)height
{
CGSize size = [originalImage size]; //gets size of Facebook photo

[imageView setFrame:CGRectMake(0, 0, size.width, size.height)];

[self.view addSubview:imageView]; //adds imageView to view

CGRect rect = CGRectMake (size.width / 4, size.height / 4 ,
(size.width / 1), (size.height / 2));

//THIS NEXT LINE GIVES THE COMPILER WARNING!!
[imageView setImage:[UIImage
imageWithCGImage:CGImageCreateWithImageInRect([originalImage CGImage], rect)]];

[imageView setFrame:CGRectMake(x, y, width, height)];
[self.view addSubview:imageView];

}

感谢任何帮助或指导。

最佳答案

调用 CGImageCreateWithImageInRect() 返回一个您必须释放的对象。 (它的保留计数为 1)

ARC 不会为您处理 Core Foundation 对象的保留/释放。

您的代码应如下所示:

{
CGImageRef cgImage = CGImageCreateWithImageInRect([originalImage CGImage], rect)
[ imageView setImage:[ UIImage imageWithCGImage:cgImage ] ] ;
CGImageRelease( cgImage ) ;
}

编辑:

这是另一种选择:

[imageView setImage:[UIImage    
imageWithCGImage:CFBridgingRelease( CGImageCreateWithImageInRect([originalImage CGImage], rect))]];

关于objective-c - 使用带有 ARC 的 Xcode 的对象的潜在泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014777/

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