Правильный способ установки статического объекта, необходимого для метода - PullRequest
5 голосов
/ 01 июня 2011

Я создаю категорию на NSDate, которая преобразует NSDate в NSString.Для этого используется NSDateFormatter.Я обнаружил, что выделение, а затем освобождение форматера каждый раз вызывало заметные задержки в моем приложении (эта категория используется очень часто), поэтому я обновил свой метод 'format', чтобы он выглядел так:правильный способ обработки статической переменной в какао?Это утечка (нет dealloc после alloc)?Существует ли лучший способ сделать что-то подобное?Спасибо!

Ответы [ 2 ]

9 голосов
/ 01 июня 2011

Вы эффективно создаете синглтон.Если он не будет использоваться на протяжении всего сеанса работы вашего приложения, не беспокойтесь об использовании памяти.Даже если он будет использоваться только с перерывами, оставить один форматер даты вокруг не будет проблемой.

Т.е., как синглтон, не беспокойтесь об освобождении объекта до завершения приложения.

Если pretty должен был быть запущен из нескольких потоков (и предполагая, что NSDateFormatter сам по себе потокобезопасен - я не проверял документы и, таким образом, не пишу код без проверкибезопасность потоков), тогда вы захотите защитить инициализацию.

static dispatch_once_t onceMark;
static NSDateFormatter *formatter = nil;
dispatch_once(&onceMark, ^{
        formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterLongStyle];
        [formatter setTimeStyle:NSDateFormatterNoStyle];
});
0 голосов
/ 01 июня 2011

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

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