为什么不返回NSDate*
?
应该是创造功能吧?所有创建函数都返回类型为创建它的类的类。
现在,我做不到NSDate.date.timeIntervalSince1970
:(
我认为编译器足够聪明,可以知道 NSDate.date 即使返回类型是 id 也会返回 NSDate?
为什么不返回NSDate*
?
应该是创造功能吧?所有创建函数都返回类型为创建它的类的类。
现在,我做不到NSDate.date.timeIntervalSince1970
:(
我认为编译器足够聪明,可以知道 NSDate.date 即使返回类型是 id 也会返回 NSDate?
从 iOS 7 开始,Apple 将instancetype
大多数 Foundation 框架 API(以及其他框架)用作返回类型,因此现在例如+date
ofNSDate
具有以下签名:
+ (instancetype)date
我刚刚写了一篇关于它的短文。
构造函数和工厂方法返回id
是为了允许子类在不覆盖的情况下使用它们。
想象一下,你有一个NSDate
被调用的子类NSMutableDate
。
如果你打电话
[NSMutableDate date]
现在您希望返回一个NSMutableDate *
对象,但如果date
返回NSDate *
,您将需要覆盖该方法以更改返回类型。
使用id
允许这种灵活性。
实际上,当您定义自己的工厂方法时,clang 编译器具有instancetype
派上用场的关键字。我最近在这里谈到了这个具体问题。
类工厂方法(例如[NSMutableDate date]
,[NSMutableArray array]
等)在内部使用alloc
/ init
,并返回任何init
返回值。
init
及其兄弟 ( initWith...
) 总是返回一个id
, 并且通过扩展,类工厂方法也是如此。
它是一种工厂方法,提供了一种创建新的自动释放对象的便捷方式。
请参阅此Apple 指南。