Утечки памяти - Objective-C - PullRequest
       5

Утечки памяти - Objective-C

1 голос
/ 11 января 2011

Кто-нибудь может увидеть потенциальные утечки в этом коде?Я получаю "100%" утечку в соответствии с инструментами в строке "NSString * ender = [temp stringFromDate: now];"

        NSDateFormatter* temp = [[NSDateFormatter alloc] init];
        [temp setDateFormat:@"yyyy-MM-dd"];
        NSDate *now = [NSDate date];
        NSString *ender = [temp stringFromDate:now];

        DashboardViewController *controller = [[DashboardViewController alloc] init];
        [controller initWithStartDate:ender andEndDate:ender];
        [controller initAccount:account];

        [self presentModalViewController:controller animated:NO];
        [temp release];

Ответы [ 3 ]

4 голосов
/ 11 января 2011

Вы отпускаете контроллер после всего этого?

2 голосов
/ 11 января 2011

Этот совет не имеет отношения к исходному вопросу, но я думаю, что вы должны переименовать методы initWithStartDate:andEndDate: и initAccount:, поскольку обычно методы с именем "init" возвращают новые экземпляры.

Возможно, создайте свой собственный -(id)initWithStartDate:endDate:account: и вызовите назначенный инициализатор изнутри.

Затем вы создадите новый экземпляр контроллера с

DashboardViewController *controller = [[DashboardViewController alloc] initWithStartDate:ender endDate:ender account:account];

Гонсало

1 голос
/ 11 января 2011

Поскольку вы передаете экземпляр контроллера в -presentModalViewController: метод, этот метод сохранит ваш контроллер. Таким образом, вы можете безопасно освободить свой контроллер, но вы также должны освободить свой контроллер, поскольку правила управления памятью гласят, что объекты, которые вы выделили + инициировали, принадлежат вам и должны быть освобождены.

С другой стороны - просто небольшая заметка - NSDateFormatter - «тяжелый» объект, кешируйте экземпляр и используйте его, если это возможно. Вероятно, это также причина, по которой Apple не одобряет этот метод. Вы можете вызвать -init на NSDateFormatter с iOS 2.0 до iOS 3.2, но это не рекомендуется после iOS 3.2.

...