Xcode указывает на потенциальную утечку объекта - PullRequest
0 голосов
/ 03 сентября 2011

Прежде всего, я n00b.После долгих попыток и исследований я решил получить внешнюю помощь.Мой проект: я сделал книгу для детей.Сейчас я анализирую свой код и пытаюсь избавиться от некоторых утечек (уровень 1 + 2 Crash через некоторое время).Вот мой код

- (void)loadView {

    _oben = YES;
    _unten = NO;

    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

    UIImage *cover = [UIImage imageNamed:@"Umschlag.png"]; //Here it says "Potential leak..
    //..allocated on line 141 (thats at self.view = [[UIView alloc] initWithFrame:...
    image = [[UIImageView alloc] initWithImage:cover];
    image.frame = CGRectMake(0, 0, 768, 1024);
    [self.view addSubview:image];
    [image release];

    UITextView *text1 = [[UITextView alloc] initWithFrame:CGRectMake(184, 700, 400, 100)];
    text1.backgroundColor = [UIColor clearColor];
    text1.textAlignment = UITextAlignmentCenter;
    text1.text = NSLocalizedString(@"CoverTextKey1", nil);
    [self.view addSubview:text1];
    [text1 release];

    [self addButtonNext];
    [self addSwipeDown];
    [self addSwipeUp];
}

Есть идеи?Было бы здорово, если бы кто-нибудь мог мне помочь!Заранее спасибо Planky

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

Потенциальная утечка, выделенная в строке 141:

self.view = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];

Эта строка является чрезмерно сохраняющим объектом, поскольку alloc-init возвращает сохраненный объект (+1), а установщик свойств также сохраняет объект (+2).

Вы можете использовать временную переменную ...

UIView *temp = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = temp;
[temp release];

... или автоматический выпуск, чтобы исправить это:

self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; 
0 голосов
/ 03 сентября 2011

Используйте взамен + (UIImage *)imageWithContentsOfFile:(NSString *)path или - (id)initWithContentsOfFile:(NSString *)path. Они не кэшируют изображение, imageNamed: делает.

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