Сводит меня с ума! animationImages всегда показывает утечку памяти - PullRequest
1 голос
/ 15 декабря 2009

Я, должно быть, перепробовал более дюжины воплощений этого кода. И посмотрел на +100 ответов. Это должно быть так просто. Реальная базовая анимация (с использованием IB на этот раз), но ВСЕГДА показывает утечку памяти. Неважно, куда я положил ноль, мой выпуск, пробовал миллионы комбинаций.

// реализуем viewDidLoad для дополнительной настройки после загрузки представления, как правило, с кончика.

- (void)viewDidLoad {
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);

     myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"],
                                                         [UIImage imageNamed:@"2.png"],
                                                         [UIImage imageNamed:@"3.png"],
                                                         [UIImage imageNamed:@"4.png"],nil];

    myView.animationDuration = 1.0;

    myView.animationRepeatCount = 0;

    [myView startAnimating];

    [myView release];
     myView = nil;

    [myView.animationImages release];


    NSLog(@">>> Leaving %s <<<", __PRETTY_FUNCTION__);
}

Ответы [ 5 ]

1 голос
/ 16 декабря 2009

Здесь есть все виды вопросов. Вам не принадлежит ни одна из ссылок, которые вы пытаетесь опубликовать здесь. Какую фактическую утечку вы видите? Симулятор или Устройство?

Начните с очистки этого блока кода, избавления от выпусков и ваших настроек на ноль.

0 голосов
/ 20 ноября 2012

Добавить

myView.animationImages = nil;

до:

myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"],
                                                     [UIImage imageNamed:@"2.png"],
                                                     [UIImage imageNamed:@"3.png"],
                                                     [UIImage imageNamed:@"4.png"],nil];

Следовательно, окончательный код будет таким:

myView.animationImages = nil;

myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"],
                                                     [UIImage imageNamed:@"2.png"],
                                                     [UIImage imageNamed:@"3.png"],
                                                     [UIImage imageNamed:@"4.png"],nil];

myView.animationDuration = 1.0;

myView.animationRepeatCount = 0;

[myView startAnimating];

[myView release];
myView = nil;
0 голосов
/ 19 декабря 2009

Я не слишком уверен, прав я или нет. но я не думаю, что myView.animationImages должен быть выпущен, так как он не был инициализирован раньше, если только он не был инициализирован в других частях вашей программы, что я считаю крайне маловероятным.

Кто-нибудь, кто более осведомлен в управлении памятью, пожалуйста, проверьте. Спасибо!

0 голосов
/ 17 декабря 2009

В вашем вопросе недостаточно подробностей всей картины того, что происходит с вашим массивом изображений и myView.Не имея возможности увидеть, что происходит на полной картине, я бы посоветовал попробовать Построить -> Очистить все цели, а затем Построить -> Построить и проанализировать в Xcode.Эта сборка и анализ - только опция в версии Xcode для Snow Leopard.Он проанализирует код на предмет возможных утечек памяти и может помочь вам в правильном направлении.Это не уловит все, но это помогает указать на некоторые вещи, которые я склонен упускать, когда я в спешке.

В противном случае я предлагаю вам опубликовать, где размещается myView и объявление свойства animationImages.

0 голосов
/ 16 декабря 2009

Вы пытались поставить [myView.animationImages release]; перед [myView release];? После того, как вы отпустите myView, вы больше не сможете получить доступ к myView.animationImages, так как на него ничего нет.

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