2012-05-30 3 views
2

Я новичок в разработке iOS. Я сталкиваюсь с проблемами при работе с фоновым потоком. В моем коде resetUi работает в основном потоке пользовательского интерфейса. Теперь я запускаю фоновый поток для извлечения данных изображения и обновления моего изображения. Все работает нормально, но память протекает при вызове функцииSelectorInBackground.Утечка памяти при использовании performSelectorInBackground

Пожалуйста, дайте мне знать, где я делаю неправильно. Также, пожалуйста, предложите, если есть лучший способ обновить мой образ при извлечении из URL (dataWithContentsOfURL).

[Обновление]

Прибор отображает 2 отдельные утечки на один perfromSelectorInBackground и других на UIImage imageWithData. Я думаю, что-то будет ужасно неправильно с imageupdate (imageWithData)

-(void)updateData{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  

    profileName.text = oAuthTwitter.screen_name; 

    if(profilePic.image == nil){ 
     NSString *urlString = @"https://api.twitter.com/1/users/profile_image/"; 
     urlString = [urlString stringByAppendingFormat:oAuthTwitter.screen_name]; 
     urlString = [urlString stringByAppendingFormat:@"?size=bigger"];    
     profilePic.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]];   
     [activityIndicator stopAnimating]; 
     [activityIndicator release]; 
    } 
    [pool drain]; 

} 

- (void)resetUi{ 

    if (oAuthTwitter.oauth_token_authorized) { 
     profilePic.hidden = NO; 
     profileName.hidden = NO; 

     NSLog(@"Resetting to authorised state"); 
     [self performSelectorInBackground:@selector(updateData) withObject:nil]; 

    }else{ 

     NSLog(@"Resetting Twitter UI to non-authorized state."); 

    profilePic.hidden = YES; 
     profileName.hidden = YES;  

    } 

} 

ответ

3

Я думаю, вы должны использовать

[pool release]; 

вместо

[pool drain]; 

, который является гораздо более лучшей практики.

Также вы можете попытаться освободить ActivityIndicator в основной теме?

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

+0

Я попытался изменить его, но не повезло. – vijaykumarg

+0

Да, я запускаю код с помощью прибора для измерения утечки. Просьба уточнить, есть ли другая альтернатива для получения изображения из URL-адреса. Наверное, это вызывает все проблемы. – vijaykumarg

+0

Вы изменили объект ActivityIndicator, который я упомянул в ответе? Кроме того, что касается выбора изображения из URL-адреса, ваша логика выглядит хорошо, и я не думаю, что это причина вашей проблемы. – Krishnabhadra