我想知道为什么 [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/