NSDateFormatter的init方法已经被弃用?

16

你在哪里读到这个的? - prgmast3r
官方文档:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixADeprecatedAPI.html - bontoJR
我非常确定“setLocale”和“setTimeStyle”是正确的方法,我只是好奇现在应该如何获取NSDateFormatter实例? - fuzzygoat
+1,这太有趣了。我想知道苹果在想什么?我认为这可能是一个错误。希望有人能找出原因。 - Jonathan Sterling
7个回答

18

这个废弃通知只是苹果在清理NSDateFormatter的头文件。在NSNumberFormatter继承自NSObject中已经有了init声明。重新声明是不必要的,但在实现中,苹果会覆盖init,因为子类应该提供超类的默认初始化程序的实现。


非常感谢您的解释。这在苹果方面非常误导人。它不应该被标记为已弃用。 - dmkash
然而,仍然有必要为此类的init方法编写文档,以描述该类中的实现所完成的操作。例如,“使用默认格式初始化格式化程序”等。 - user102008

6

就像 falconcreek这里所说的那样,苹果只是在清理文档。

这意味着最初,在NSDateFormatter头文件中已经重新声明了- (id) init。那是不必要的,后来有人将其删除了。文档可能是自动生成的,没有注意到只有重新声明被弃用了。

简而言之,您可以随意使用NSDateFormatterinit方法!


1
我认为文档非常误导。我已经使用“不是很有帮助”链接向苹果发送了一条评论。 - JeremyP

2
我会信任头文件胜过文档。
例如,格式化行为和操作系统版本 看起来有矛盾之处:
默认情况下,在 Mac OS X v10.4 上,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

1

这真的很奇怪。也许 +[NSDateFormatter new] 可以完成任务?


3
如果 init 被弃用(deprecated),那么 +new 也是,因为 +new 实际上就是 +alloc/-init 的简写形式(不过你猜得还不错)。 - bbum

0
你可以自行验证,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


0

我在多个iOS4应用程序中使用init方法,它们已经通过审核并上架了。我想不出任何方法使其工作,所以看起来这只是文档上的一个笔误。


0

类参考中的示例代码仍然使用init方法,因此我认为在您自己的代码中使用它是安全的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接