asl*_*nci 1 cocoa objective-c return-type nsdate
我想知道为什么[NSDate distantPast]
和[NSDate distantFuture]
方法的返回类型是类型的id
?为什么这些方法不返回NSDate
指针?
因为多态性在某种程度上是有效的.
假设你是子类NSDate并且想要覆盖该方法.您必须使用相同的签名,以便使用此签名执行此操作:
-(NSDate*) distantPast;
Run Code Online (Sandbox Code Playgroud)
但是您无法将表达式的结果分配给子类类型的指针,并且您需要向下转换结果:
NSDateSubclass* ptr= (NSDateSubclass*)[someDateSubclassInstance distantPast];
// Downcasting is necessary here, it would give a warning or syntax error otherwise.
Run Code Online (Sandbox Code Playgroud)
即使您确定返回的对象是NSDate的子类,也需要向下转换结果.这就是为什么返回创建的对象的所有方法都被声明为返回id.