objective-c - 为什么 [NSDate distancePast] 和 [NSDate distanceFuture] 方法返回 id?

标签 objective-c cocoa nsdate return-type

我想知道为什么 [NSDatemotePast][NSDatedistanceFuture] 方法的返回类型是 id 类型?为什么这些方法不返回 NSDate 指针?

最佳答案

因为多态性只在一种方式上有效。

假设您继承了 NSDate 的子类并且想要重写该方法。您必须使用相同的签名,因此您将使用此签名来执行此操作:

-(NSDate*) distantPast;

但是您将无法将表达式的结果分配给子类类型的指针,并且您需要将结果向下转换:

NSDateSubclass* ptr= (NSDateSubclass*)[someDateSubclassInstance distantPast];
// Downcasting is necessary here, it would give a warning or syntax error otherwise.

即使你确定返回的对象是 NSDate 的子类,你也需要对结果进行向下转换。这就是为什么所有返回创建的对象的方法都被声明为返回一个 id。

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

相关文章:

objective-c - NSCocoaErrorDomain 问题。

objective-c - 访问命名管道以进行读写

ios - NSDate 格式化

ios - Swift - 如何从 json 获取数据类型

iPhone - 比较日期不按预期工作

ios - 搜索栏不接收触摸

iphone - 检测全局 UIWindow 对象上的触摸事件

iphone - 关于运送 iphone 应用程序的安全问题

macos - 无法在 NSView 中正确定位 NSImageView

objective-c - 在 Cocoa 中编写我自己的 @dynamic 属性