gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:49:25 24 4
gpt4 key购买 nike

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

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