UIImageView setImage Утечки? - PullRequest
       1

UIImageView setImage Утечки?

3 голосов
/ 04 мая 2011

В течение бесконечных часов искали решение этой проблемы. Проблема действительно проста. У меня есть UIImageView в перо, я загружаю изображение из Интернета и устанавливает UIIImageView с изображением. Я выпускаю viewController. Dealloc фактически вызывается (!) И снова загружает viewController и изображение. Это можно сделать, просто войдя в фоновый режим. Утечки прибора не сообщают о каких-либо утечках, но при распределении показывают, что изображение сохраняется в памяти и продолжает расти.

Базовый пример:

-(id)init {
    if((self = [super init])) {
        id path = [NSString stringWithFormat:@"http://www.aSite.com/largeImage.jpg"];
        NSData* urlData = [[NSData alloc] initWithContentsOfURL:url];
        UIImage* img = [[UIImage alloc] initWithData:urlData];
        [background setImage:img];
        [urlData release];
        [img release];
    }
    return self;
}

-(void)dealloc {
    [background release];
    [super dealloc];
}

Некоторые люди говорят, что UIImageView на самом деле протекает, или на самом деле CGImage. Некоторые люди говорят, что инструмент не отображается правильно. Я получаю предупреждение о памяти после 10-15 раз, когда я делаю это с 2,5 Мб большого изображения. Результаты от реального устройства и последней iOS (или по крайней мере 4-5 недель назад). Поскольку UIImageView используется очень многими людьми, я подумал, что будет легко найти проблему или получить решение от Apple?

Источник CGImage Leak: (iphone) UIImageView setImage: утечки?

РЕДАКТИРОВАТЬ: Я был abit tierd, когда я написал пример. Пример правильный сейчас. Я также попробовал с авто-выпущенным объектом, и та же самая "утечка" все еще там. Пожалуйста, ответьте на вопрос , если вы собираетесь написать ответ.

Ответы [ 4 ]

2 голосов
/ 04 мая 2011

release URL после установки изображения

[background setImage:[UIImage imageWithData:urlData]];
[urlData release];
[img release];
1 голос
/ 04 мая 2011

В следующем коде вы делаете некоторые ошибки.

  [urlData release];
  [background setImage:[UIImage imageWithData:urlData]];

вы должны использовать

if((self = [super init])) {
        id path = [NSString stringWithFormat:@"http://www.aSite.com/largeImage.jpg"];
        NSData* urlData = [[NSData alloc] initWithContentsOfURL:url];
        UIImage* img = [[UIImage alloc] initWithData:urlData];
        [background setImage:img];
        [urlData release];
        [img release];
    }
0 голосов
/ 10 ноября 2011

Вы пробовали:

-(id)init {
    if((self = [super init])) 
    {

        [background setImage:
             [UIImage imageWithData:
                 [NSData dataWithUrl:
                    [NSUrl urlWithString:
                       @"http://www.aSite.com/largeImage.jpg" ]]]
        ];

    }
    return self;
}

-(void)dealloc {
    [super dealloc];
}

чисто и без утечек памяти!

0 голосов
/ 04 мая 2011

Не могли бы вы заменить

[background setImage:[UIImage imageWithData:urlData]];

на

[background setImage:img];

ОБНОВЛЕНИЕ

Я думаю, это также должно помочь

if((self = [super init])) {
        id path = [NSString stringWithFormat:@"http://www.aSite.com/largeImage.jpg"];
        NSData* urlData = [[NSData alloc] initWithContentsOfURL:url];
        [background setImage:[UIImage imageWithData:urlData]];
        [urlData release];

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...