Per
NSDateFormatter
的init
方法在iPhone OS 2.0到iPhone OS 3.2中是“可用的”,因此不适用于4.0。NSDateFormatter
仍然可以工作,但这似乎有些奇怪。这是一个错误吗?还是有其他方法创建NSDateFormatter
?
注:原文中的 "Per" 估计是笔误,不影响翻译内容。
Per
NSDateFormatter
的init
方法在iPhone OS 2.0到iPhone OS 3.2中是“可用的”,因此不适用于4.0。NSDateFormatter
仍然可以工作,但这似乎有些奇怪。这是一个错误吗?还是有其他方法创建NSDateFormatter
?
这个废弃通知只是苹果在清理NSDateFormatter的头文件。在NSNumberFormatter继承自NSObject中已经有了init声明。重新声明是不必要的,但在实现中,苹果会覆盖init,因为子类应该提供超类的默认初始化程序的实现。
就像 falconcreek
在这里所说的那样,苹果只是在清理文档。
这意味着最初,在NSDateFormatter头文件中已经重新声明了- (id) init
。那是不必要的,后来有人将其删除了。文档可能是自动生成的,没有注意到只有重新声明被弃用了。
简而言之,您可以随意使用NSDateFormatter
的init
方法!
NSDateFormatter
实例的行为与它们在 Mac OS X 10.0 到 10.3 版本中的行为相同。在 Mac OS X v10.5 及更高版本上,默认值为10.4+ 行为。如果您使用 initWithDateFormat:allowNaturalLanguage:
初始化格式化程序,则正在创建“旧式”日期格式化程序(出于向后兼容性原因)。若要使用新行为,请使用 init
初始化格式化器。如有必要,您可以使用 setDefaultFormatterBehavior:
设置默认类行为,您可以使用 setFormatterBehavior:
消息并带上参数 NSDateFormatterBehavior10_4
来设置实例行为。initWithDateFormat:allowNaturalLanguage:
才是已弃用的方法?initWithDateFormat:allowNaturalLanguage:
确实是被弃用的方法。在这种情况下,应该参考头文件。 - paulbailey这真的很奇怪。也许 +[NSDateFormatter new]
可以完成任务?
init
被弃用(deprecated),那么 +new
也是,因为 +new
实际上就是 +alloc/-init
的简写形式(不过你猜得还不错)。 - bbumNSDateFormatter
在不同的初始化程序和编译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
。
我在多个iOS4应用程序中使用init方法,它们已经通过审核并上架了。我想不出任何方法使其工作,所以看起来这只是文档上的一个笔误。
类参考中的示例代码仍然使用init
方法,因此我认为在您自己的代码中使用它是安全的。