сбой приложения, если я выполняю CGImageRelease (sourceImageRef), цель C

Мой первый пост находится здесь, чтобы посмотреть по той причине, почему мое приложение падает. После почти 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 часа, я могу воспроизвести ошибку. Если я удалю эту строку и буду точно следовать тому, что я делаю, чтобы воспроизвести ошибку, приложение будет работать правильно и вообще не будет падать.

Любая мысль, почему эта строка является причиной сбоя моего приложения


person tranvutuan    schedule 02.03.2013    source источник
comment
Почему вы CGImageRelease(sourceImageRef); выпуская это, если вы не создали или не сохранили его?   -  person βhargavḯ    schedule 02.03.2013
comment
@Bhargavi: я создал его с помощью [image CGImage], не так ли? Вот почему я выпускаю его после создания newImage. Я могу ошибаться в этом.   -  person tranvutuan    schedule 02.03.2013


Ответы (1)


Вы ссылаетесь только на sourceImageRef, используя CGImageRef sourceImageRef = [image CGImage]; . Более того, вы не создаете, не сохраняете его, поэтому вы не несете ответственности за его освобождение.

Я хотел бы, чтобы вы просмотрели сообщение Выпуск CGImageRef .

Также просмотрите Link 1 и Ссылка 2

person βhargavḯ    schedule 02.03.2013