2013-03-02 32 views
0

我的第一篇文章是在here,以查找我的應用崩潰的原因。經過近3個小時的檢測,現在我可以找出泄漏的位置。如果我正在做CGImageRelease(sourceImageRef),目標C

首先,我正在做的是使用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小時後檢測,我可以重現錯誤。如果我刪除該行,並按照我所做的來重現錯誤,該應用程序運行正常並且完全不會崩潰。

任何想爲什麼這條線是什麼原因崩潰我的應用程序

+0

你爲什麼CGImageRelease(sourceImageRef);釋放這個,除非你沒有創建或保留它? – 2013-03-02 06:50:28

+0

@Bhargavi:我用'[image CGImage]'創建了它,不是嗎?這就是爲什麼我在'newImage'創建後釋放它。我對此可能是錯誤的。 – tranvutuan 2013-03-02 07:02:15

回答

2

你只使用CGImageRef sourceImageRef = [image CGImage];引用sourceImageRef。更重要的是你沒有創造,保留它,所以它不是你的責任釋放它。

我想你看看帖子Releasing CGImageRef

也期待在Link 1Link 2