NSDateFormatter的init方法已被弃用?

问题描述:

NSDateFormatter的init方法已被弃用?

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

NSDateFormatterinit方法是 “可用于iPhone OS 2.0通过iPhone OS 3.2”,因此不 4.0。现在,它确实有效,但这似乎很奇怪。这是一个错误还是有其他方法来创建一个NSDateFormatter

+0

你从哪里读到这个? – prgmast3r 2010-12-14 15:49:53

+0

官方文档:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixAdepledatedAPI.html – bontoJR 2010-12-14 16:04:23

+0

我很确定“setLocale”和“setTimeStyle”是正确的方法来做到这一点,我只是好奇你现在应该如何获得NSDateFormatter实例? – fuzzygoat 2010-12-14 16:08:15

这个弃用只是苹果清理NSDateFormatter头。 init已经在NSObject的NSNumberFormatter继承自NSObject中声明。 Redeclaring是没有必要的,但是在实现中,苹果将会覆盖init,因为subclassess应该为超类的默认构造器提供实现。

+0

非常感谢你的解释。非常误导苹果的一部分。它不应该被标记为已弃用。 – dmkash 2011-03-06 22:12:29

+0

然而,为这个类的init方法提供* documentation *对于描述这个类的实现有什么作用仍然很有用。例如“初始化默认格式化的格式化程序”等。 – user102008 2011-04-26 00:06:00

我在多个iOS4应用程序中使用init方法,它们已被批准并在商店中使用。我可以想办法让它无法工作,所以它看起来只是它在文档上的一个错字。

类引用中的示例代码仍然使用init方法,所以我会说它可以安全地在您自己的代码中使用它。

这真的很奇怪。也许+[NSDateFormatter new]将完成这项工作?

+3

如果'init'被弃用,那么'+ new'也是因为'+ new'不管怎么说都不过是'alloc + -init'(但猜测得很好)。 – bbum 2010-12-14 17:59:43

我会相信文档中的头文件。

例如,Formatter Behaviors and OS Versions似乎自相矛盾:

默认情况下,对NSDateFormatter的Mac OS X v10.4的情况下,具有相同的行为,因为他们没有在Mac OS X版本10.0到10.3。在Mac OS X v10.5及更高版本中,NSDateFormatter默认为10.4+行为。

如果使用initWithDateFormat:allowNaturalLanguage:初始化格式化程序,则(为了向后兼容的原因)创建“旧式”日期格式化程序。要使用新行为,请使用init初始化格式器。如有必要,您可以使用setDefaultFormatterBehavior:)设置默认类行为,您可以使用setFormatterBehavior:消息和参数NSDateFormatterBehavior10_4来设置实例的行为。

听起来像initWithDateFormat:allowNaturalLanguage:实际上是弃用的方法?

+0

没错,看起来'initWithDateFormat:allowNaturalLanguage:'实际上是不赞成使用的方法。头文件是这样的情况下应该引用的头文件。 – paulbailey 2010-12-14 22:07:41

falconcreek表示here,Apple刚刚清理文档。

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

总之,使用init随着NSDateFormatter

+1

我认为文件传递极具误导性。我使用了“无用”链接向Apple发送评论。 – JeremyP 2010-12-15 09:30:29

您可以证明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