2016-01-22 3 views
1

В этом коде есть утечка памяти, но я не могу ее найти. Что я делаю не так? В частности, строки 1 и 2 добавляют к использованию памяти приложений, и только память из первой линии исчезает, когда контекст завершается.UIGraphics Memory Leak

UIGraphicsBeginImageContext(imageView.bounds.size); 
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

EDIT 1: Полный метод код ниже:

UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
[imageView setFrame:CGRectMake(0, 0, self.view.frame.size.width + 16 - ((int)self.view.frame.size.width % 16), self.view.frame.size.height + 16 - ((int)self.view.frame.size.height % 16))]; // If image width and height is not a multiple of 16, the video becomes distorted when written to a file 
imageView.contentMode = UIViewContentModeScaleToFill; 

[imageView addSubview:[[UIImageView alloc] initWithImage:[ViewController makeRedCircle]]]; 

UIGraphicsBeginImageContext(imageView.bounds.size); 
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
+1

Что заставляет вас думать, что есть утечка? – matt

+0

@matt Он добавляет пару мегабайт в память постоянно каждый раз при запуске. Я протестировал приложение на iPhone 6 с помощью Xcode. – mntruell

+1

Вы использовали Инструменты? - И что такое 'образ'? Что вы делаете с ним позже? Другими словами, можете ли вы дать мне код, который я могу запустить, чтобы воспроизвести утечку? – matt

ответ

2

Там нет ничего такого, о вашем коде, который просачивается:

UIGraphicsBeginImageContext(imageView.bounds.size); 
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Не существует никаких доказательств утечки. Для тестирования я создал приложение, единственным кодом которого является следующий код:

@interface ViewController() 
@property (weak, nonatomic) IBOutlet UIImageView* imageView; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIImageView* imageView = self.imageView; 
    for (int i = 0; i <= 10; i++) { 
     // Here is your code in action! 
     UIGraphicsBeginImageContext(imageView.bounds.size); 
     [imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
} 

@end 

Отсутствует утечка; последовательные итерации цикла не добавляют к памяти приложения.

Поэтому мы можем заключить, что если память вашего приложения растет, это происходит из-за чего-то другого, что вы делаете (например, что вы делаете с изображением позже).

 Смежные вопросы

  • Нет связанных вопросов^_^