如果我正在做CGImageRelease(sourceImageRef),目标C,应用程序崩溃

时间:2013-03-02 06:41:34

标签: ios objective-c cgimageref

我的第一篇帖子位于here,以查找我的应用崩溃的原因。经过近3个小时的检测,现在我可以找到泄漏的位置。

首先,我正在做的是使用AFNetworking下载图像后,我将根据下载图像的大小设置uiimageview的大小。

[self.headerView setImageWithURLRequest:[NSMutableURLRequest requestWithURL:[NSURL URLWithString:fundraiserInfo.imageUrl]]
                       placeholderImage:nil
                                success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                                    // Use following to set the size of image according to retina or non retina
                                    CGImageRef sourceImageRef   =   [image CGImage];
                                    UIImage *newImage           =   [UIImage imageWithCGImage:sourceImageRef scale:[image scale]                                                                                           orientation:[image imageOrientation]];
                                    CGImageRelease(sourceImageRef); // <------ this is I am getting crash
                                    weakObj.image  = newImage;                                                                                                    
                                 }
                                 failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                                        ;
                                 }
 ];

我收到如下警告

Incorrect decrement of the reference count of an object that is not owned at this point by the caller

我如何发现泄漏:

放置该行并运行该应用程序,该应用程序在多次尝试后崩溃。通过2小时后检测,我可以重现错误。如果我删除该行并完全按照我的操作重现错误,则该应用程序正常运行且完全没有崩溃。

任何想到为什么这条线是我的应用程序崩溃的原因

1 个答案:

答案 0 :(得分:2)

您只使用CGImageRef sourceImageRef = [image CGImage];引用sourceImageRef。你不是创造,保留它,所以发布它不是你的责任。

我希望你看一下帖子Releasing CGImageRef

另请参阅Link 1Link 2