iOS: утечка памяти в NSDateFormatter / viewDidUnload - PullRequest
2 голосов
/ 10 апреля 2011

У меня есть контроллер вида, который после выхода из стека показывает утечку памяти в инструменте Leaks. После прочтения большого количества постов о ошибке NSDateFormatter и реализации обходного пути setDateFormat 'Z' я все еще теряю память (согласно Инструментам).

В моем заголовке:

NSDateFormatter *dfm;
...
@property (nonatomic, retain) NSDateFormatter *dfm;

В моей реализации:

@synthesize dfm;
...
- (void) viewDidLoad {
    [super viewDidLoad];
    dfm = [[NSDateFormatter alloc] init];
    [self.dfm setDateFormat:@"h:mma Z"]; // leaks with & without this line
}
...
- (void)viewDidUnload {
    //SOLUTION: This method was never being called. Needed to use dealloc, per the answer below.
    [dfm release];
    self.dfm = nil;
    [super viewDidUnload];
}

Что-нибудь выделяется как неправильное? Единственное, что я делаю с dfm в этом классе, это вызов stringFromDate в нескольких местах для возврата автоматически выпущенных строк, которые я использую с UILabels.

Заранее спасибо.

1 Ответ

5 голосов
/ 10 апреля 2011

Вы не можете полагаться на viewDidUnload для вызова.Вам также необходимо:

- (void)dealloc {
    self.dfm = nil;
    // whatever else you need
    [super dealloc];
}

Вам нужно только self.dfm = nil, потому что синтезированный сеттер по умолчанию сделает релиз.

...