Утечка при назначении областей UIImage для UIImageView animationImages - PullRequest
1 голос
/ 30 марта 2012

У меня есть метод категории UIImage, который делает это:

- (UIImage *)subimageInRect:(CGRect)rect {

    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect);
    UIImage *answer = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return answer;
}

И еще один метод категории, который разбивает короткое, широкое изображение (например, кинопленку) на N более равномерно распределенных изображений (например, рамок)., следующим образом:

- (NSArray *)subimagesHorizontally:(NSInteger)count {

    NSMutableArray *answer = [NSMutableArray arrayWithCapacity:count];
    CGFloat width = self.size.width / count;
    CGRect rect = CGRectMake(0.0, 0.0, width, self.size.height);

    for (int i=0; i<count; i++) {
        [answer addObject:[self subimageInRect:rect]];
        rect = CGRectOffset(rect, width, 0.0);
    }
    return [NSArray arrayWithArray:answer];
}

Им присваивается свойство selectedAnimationImages объекта UIImageView, некоторые из которых содержатся в таблице.(и обрабатываются стандартным способом. Ячейки прототипа, помеченные рассказом, помеченные и доступные в источнике данных с помощью [cell viewWithTag: ...]).

Работает нормально, но утечка сообщает об утечке, как только таблицагрузы.Может кто-нибудь помочь мне определить, что я делаю не так?

enter image description here

1 Ответ

1 голос
/ 30 марта 2012

Прежде всего, код, который вы разместили , не создает изображения с изменяемым размером и не вызывает resizableImageWithCapInsets:, поэтому первые две утечки не имеют отношения к коду. Точно так же последние две утечки происходят в [UIImageView setAnimationImages], который код, который вы отправили , не вызывает. Я хотел бы увидеть, если утечки все еще сообщаются после того, как вы освободите представление изображения. Если представление изображения находится в многократно используемой ячейке табличного представления, это может привести к путанице в инструментах. Фактически, в этом случае анимационные изображения могут быть освобождены только вместе с самим табличным представлением.

Короче говоря, вы должны изучить соответствующие методы (кстати, Instruments также может показать трассировку стека, где он считает, что произошла утечка). Код, который вы разместили, абсолютно в порядке, ARC или нет.

...