Метод NSDateFormatter init устарел?
Per
http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html
Метод init
NSDateFormatter
- "Доступен в iPhone OS 2.0 через iPhone OS 3.2" и, следовательно, не в 4.0. Теперь это работает, но это кажется странным. Это ошибка или есть какой-то другой способ создать NSDateFormatter
?
Ответы
Ответ 1
Это устаревание - это просто очистка Apple заголовками для NSDateFormatter. init уже объявлен в NSObject, из которого NSNumberFormatter наследуется. Redeclaring не требуется, однако в реализации apple переопределит init, поскольку подклассы должны обеспечивать реализации инициализатора по умолчанию суперкласса.
Ответ 2
Как falconcreek
сказал здесь, Apple просто очищает документы.
Это означает, что изначально - (id) init
был обновлен в файле заголовка NSDateFormatter. Это было необязательно, и кто-то просто удалил его позже. Документация, вероятно, сгенерирована автоматически и не подбирала, что это была только переоценка, которая устарела.
Короче говоря, используйте init
, как хотите, с помощью NSDateFormatter
!
Ответ 3
Я бы доверял файлам заголовков над документацией.
Например, Formatter Behaviors и Версии ОС, кажется, противоречит самому себе:
По умолчанию в Mac OS X v10.4 экземпляры NSDateFormatter
имеют то же поведение, что и в версиях Mac OS X с 10.0 по 10.3. В Mac OS X v10.5 и более поздних версиях NSDateFormatter
по умолчанию используется поведение 10.4+.
Если вы инициализируете форматировщик с помощью initWithDateFormat:allowNaturalLanguage:
, вы (по соображениям обратной совместимости) создаете форматировщик даты "старого стиля". Чтобы использовать новое поведение, вы инициализируете форматтер с помощью init
. Если необходимо, вы можете установить поведение класса по умолчанию с помощью setDefaultFormatterBehavior:
), вы можете установить поведение для экземпляра с помощью сообщения setFormatterBehavior:
с аргументом NSDateFormatterBehavior10_4
.
Похоже, что initWithDateFormat:allowNaturalLanguage:
- это действительно устаревший метод?
Ответ 4
Это действительно странно. Может быть, +[NSDateFormatter new]
выполнит эту работу?
Ответ 5
Я использую метод init в нескольких приложениях iOS4, и они одобрены и хранятся в магазине. Я не могу придумать, как заставить его работать, так что это похоже на опечатку на документах.
Ответ 6
Пример кода в ссылке класса по-прежнему использует метод init
, поэтому я бы сказал, что он безопасен для использования в вашем собственном коде.
Ответ 7
Вы можете убедиться, что NSDateFormatter
имеет другое поведение, зависящее от выбранного вами инициализатора и SDK, с которым вы компилируете. Следующее тестируется с SDK 10.5 и 10.6.
NSDateFormatter* df = [[NSDateFormatter alloc] initWithDateFormat:@"yyyyMMdd" allowNaturalLanguage:NO];
if ([df formatterBehavior] == NSDateFormatterBehavior10_0)
NSLog(@"NSDateFormatterBehavior10_0");
else if ([df formatterBehavior] == NSDateFormatterBehavior10_4)
NSLog(@"NSDateFormatterBehavior10_4");
Это возвращает NSDateFormatterBehavior10_0
.
Вместо этого, когда вы используете [[NSDateFormatter alloc] init];
, поведение NSDateFormatterBehavior10_4
.