0

我的第一篇文章是在这里寻找我的应用程序崩溃的原因。经过将近 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 小时后检测,我可以重现错误。如果我删除该行并完全按照我所做的来重现错误,则该应用程序运行正常并且根本没有崩溃。

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

4

1 回答 1

3

您仅使用 sourceImageRef 引用CGImageRef sourceImageRef = [image CGImage];. 更何况你不是在创造、保留它,所以释放它不是你的责任。

我想让你看看发布 CGImageRef的帖子。

另请查看链接 1链接 2

于 2013-03-02T07:16:07.357 回答