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