2010-06-23 1 views
1

Я работаю над анимацией небольших подсмотров во всем моем пользовательском интерфейсе, используя переход с переворотом. Чтобы заставить Flip-переход работать правильно, я создаю временный UIView, чтобы предоставить контекст, запустите переход, а затем вам нужно будет очистить его потом. Но мне трудно понять, как освободить объект без сбоев приложения. Вот кодовый блок:Как избежать утечки с помощью этой последовательности анимации на основе блоков?

UIView *tempContainer = [UIView alloc]; 
tempContainer = [self.view viewWithTag:700]; 

[UIView transitionWithView:tempContainer 
     duration:2 
     options:UIViewAnimationOptionTransitionFlipFromRight 
     animations:^{ 
        [[[tempContainer subviews] objectAtIndex:0] removeFromSuperview]; 
        [tempContainer addSubview:newImageView]; 
        [newImageView release]; 
        } 
      completion:^(BOOL finished){ 
        [tempContainer release]; //Crashes app 
        }]; 

Я использую блочные методы анимации для iOS4. Проблема заключается в том, что мой tempContainer определенно протекает, но если я выпущу или автоматически зарегистрирую его в блоке завершения, мое приложение выйдет из строя, и я сделаю это после сообщения [UIView transition ...], он сработает. Каков наилучший способ реорганизовать это, чтобы я не пропустил свою память? (У меня есть 30 из этих маленьких вещей, чтобы сделать.)

ответ

1

Это утечка, потому что после того как вы +alloc -ed

UIView *tempContainer = [UIView alloc]; 

вы немедленно заменить его.

tempContainer = [self.view viewWithTag:700]; 

Он падает, когда вы -release, потому что вы не владеете превалирующее мнение ([self.view viewWithTag:700]).

+0

aha, gotcah. Я изменил его на UIView * tempController = [self.view viewWithTag: 700]; и теперь я не вижу утечек и не хочу выпускать tempController, поскольку это просто указатель на другое представление, принадлежащее чему-то другому. благодаря! – Jeof