утечка памяти при использовании MBProgressHUD - PullRequest
2 голосов
/ 21 декабря 2010

Я использую MBProgressHUB, с изменениями найденного кода здесь .

Несколько слов о моем коде:

  • Код в моем приложении Делегат
  • Ряд других классов называют это
  • Я использую его с асинхронным NSURLConnection
  • Я не объявляю это: @property (nonatomic, retain) MBProgressHUD * HUD;
  • Я не : @synthesize HUD;
  • (и, конечно, я не освобождаю его в моем dealloc)

Я использую его следующим образом:

- (void)setSearchingMode:(BOOL)isSearching {
    // when network action, toggle network indicator and activity indicator
    if (isSearching) {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

        UIWindow *theWindow = [UIApplication sharedApplication].keyWindow;
        HUD = [[MBProgressHUD alloc] initWithWindow:theWindow];
        [theWindow addSubview:HUD];

        //HUD.labelText = @"Connecting";
        [HUD show:YES];
    } else {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

        [HUD hide:YES];
        [HUD removeFromSuperview];
        [HUD release];
    }
}

- (void)setSearchingText:(NSString *)whatToSay {
    HUD.labelText = whatToSay;
}

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

Тип исключения: EXC_BAD_ACCESS (SIGBUS)
Коды исключений: KERN_PROTECTION_FAILURE в 0x0000000c

0 libobjc.A.dylib 0x000027d8 objc_msgSend + 16
1 My 0x00003120 - [MyAppDelegate setSearchingMode:] (MyAppDelegate.m: 363)
2 My 0x00003458 - [MyAppDelegate connectionDidFinishLoading:] (MyAppDelegate.m: 341)
3 Foundation 0x00032896 - [NSURLConnection (NSURLConnectionReallyInternal) sendDidFinishLoading] + 62
4 Foundation 0x00032818 _NSURLConnectionDidFinishLoading + 72

в связи с загрузкой DidFinish я звоню:

[self setSearchingMode:NO];

Я пытался сделать это, создавая свойства доступа для HUD, но не смог обойти строку "[MBProgressHUD alloc] initWithWindow" - и я не хочу продолжать выделять ивару!

Спасибо, если кто-нибудь может указать мне лучшее направление здесь ..

1 Ответ

1 голос
/ 21 декабря 2010

Если вам довелось получить последовательность:

[self setSearchingMode:YES];
[self setSearchingMode:NO];
[self setSearchingMode:NO];

Этот код будет зависать, как описано, из-за висящей ссылки на HUD. Когда вы делаете [HUD release];, добавьте HUD = nil; после этой строки.

Это не утечка памяти; это переиздание. Или, что более вероятно, свисающие ссылки.

(и, конечно, я не выпускаю его в моя сделка)

Почему бы и нет? Если вы сохраните его, лучше отпустите!

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