Вопрос по objective-c – Не удается освободить неиспользуемую память CALayer при использовании нескольких слоев

3

Я использую несколько CALayer'ов в своем приложении с большим UIImage в качестве содержимого. к сожалению, когда мне не нужен ни слой, ни изображение - память не освобождается.

код, который я использую для создания слоя:

UIImage *im = [UIImage imageNamed:@"image_1.jpg"];
CALayer * l = [CALayer layer];
[l setBounds:CGRectMake(0, 0, 1024, 768)];
[l setPosition:CGPointMake(512, 384)];
[l setAnchorPoint:CGPointMake(0.5, 0.5)];
[l setHidden:NO];
[l setContents:(id) im.CGImage];
[self.layer addSublayer:l]; // self is a subclass of UIView
[self.tmpArr addObject:l]; // self.tmpArr contains the layers I am using (one in this example)

код, который я использую для освобождения слоя и его содержимого:

CALayer * l = [self.tmpArr objectAtIndex:i];
[l removeFromSuperlayer];
[l setHidden:YES];
[l setContents:nil];
[self.tmpArr removeAllObjects];

когда я использую профилировщик памяти инструментов, я вижу, что реальная память увеличивается при создании слоя, но никогда не уменьшается при его освобождении. Я не могу использовать релиз, так как я использую ARC. что я тут не так делаю?

Благодарю.

Ваш Ответ

2   ответа
0

которое я создал в своем коде, было нарисовано во время выполнения с помощьюCGImageCreateWithImageInRect, Произведенный объект - CGImageRef. Я просто забыл выпустить его с помощьюCGImageRelease вызывая постепенное увеличение потребления памяти, и после 3 или 4 анимаций приложение вылетает из-за ограничений памяти.

Всегда выпускатьCGImageRef.

6

imageNamed: Метод использует статический кеш, который освобождается только при нехватке памяти.

Ваши варианты:

Use -[UIImage imageWithContentsOfFile:] instead. Ignore the problem. The cache is cleaned up when a memory notification comes in.
Error: User Rate Limit Exceeded Ulile
Error: User Rate Limit Exceededstackoverflow.com/questions/26715727/…

Похожие вопросы