gpt4 book ai didi

objective-c - 为什么 [NSDate date] 返回 id?

转载 作者:太空狗 更新时间:2023-10-30 03:25:42 25 4
gpt4 key购买 nike

为什么不返回 NSDate*

它应该是一个创造函数吧?所有创建函数都返回类型为创建它的类的类。

现在,我不能执行 NSDate.date.timeIntervalSince1970 :(

我认为编译器足够聪明,知道 NSDate.date 返回 NSDate,即使返回类型是 id?

最佳答案

更新

从 iOS 7 开始,Apple 使用 instancetype 作为大多数 Foundation 框架 API(以及其他框架)的返回类型,所以现在例如 +date NSDate 具有以下签名:

+ (instancetype)date

我刚刚写了一个short article关于它。

原始答案

构造函数和工厂方法返回 id 以允许子类使用它们而无需 ovverriding。

假设您有一个名为 NSMutableDateNSDate 子类。

如果你打电话

[NSMutableDate date]

现在您希望返回一个 NSMutableDate * 对象,但是如果 date 返回 NSDate * 您将需要覆盖它方法改变返回类型。

使用 id 可以实现这种灵 active 。

实际上,clang 编译器具有 instancetype 关键字,在您定义自己的工厂方法时可以派上用场。我最近谈到了这个具体问题here .

关于objective-c - 为什么 [NSDate date] 返回 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14136271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com