2010-06-18 5 views
1

Я написал сетевой класс, который управляет всеми сетевыми вызовами для моего приложения. Существует два метода: showLoadingAnimationView и hideLoadingAnimationView, которые будут отображать UIActivityIndicatorView в представлении моего текущего диспетчера представлений с фоном. Я получаю утечки памяти где-то по этим двум методам. Вот кодЗагрузка анимации Утечка памяти

-(void)showLoadingAnimationView 
{ 
    textmeAppDelegate *textme = (textmeAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
    if(wrapperLoading != nil) 
    { 
     [wrapperLoading release]; 
    } 
    wrapperLoading = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)]; 
    wrapperLoading.backgroundColor = [UIColor clearColor]; 
    wrapperLoading.alpha = 0.8; 

    UIView *_loadingBG = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)]; 
    _loadingBG.backgroundColor = [UIColor blackColor]; 
    _loadingBG.alpha = 0.4; 

    circlingWheel = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    CGRect wheelFrame = circlingWheel.frame; 
    circlingWheel.frame = CGRectMake(((320.0 - wheelFrame.size.width)/2.0), ((480.0 - wheelFrame.size.height)/2.0), wheelFrame.size.width, wheelFrame.size.height); 
    [wrapperLoading addSubview:_loadingBG]; 
    [wrapperLoading addSubview:circlingWheel]; 
    [circlingWheel startAnimating]; 
    [textme.window addSubview:wrapperLoading]; 
    [_loadingBG release]; 
    [circlingWheel release]; 
} 

-(void)hideLoadingAnimationView 
{ 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
    wrapperLoading.alpha = 0.0; 

    [self.wrapperLoading removeFromSuperview]; 
    //[NSTimer scheduledTimerWithTimeInterval:0.8 target:wrapperLoading selector:@selector(removeFromSuperview) userInfo:nil repeats:NO]; 
} 

Вот как я называю эти два метода

[NSThread detachNewThreadSelector:@selector(showLoadingAnimationView) toTarget:self withObject:nil]; 

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

[self hideLoadingAnimationView]; 

У меня возникают утечки памяти, когда я вызываю функцию showLoadingAnimationView. Что-то не так в коде или есть лучшая техника для показа анимации загрузки, когда мы делаем сетевые звонки?

ответ

2

Метод showLoadingAnimationView возвращает неавтоматически выпущенный вид (retainCount -> 1), который вы позже (я предполагаю) добавляю в другое представление (saveCount -> 2).

В hideLoadingAnimationView вы удаляете только вид из своего супервизора (retainCount -> 1). В этом методе отсутствует release. Это означает, что вы не должны звонить release в showLoadingAnimationView.

+0

вы уверены, что это единственная проблема, потому что даже освобождение объекта в hideLoadingAnimationView не решает проблему. –

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