说我有两个班级:
@interface Rectangle: NSObject {
int width;
int height;
}
// Methods here...
@end
@interface Square: Rectangle
- (void)initWithLength:(int) length;
@end
Square继承自Rectangle。现在,如果我有一个方法在另一个类中使用Rectangle
,比如- (void)drawShape:(Rectangle *) rectangle
,我可以将Square
对象传递给它吗?我应该使用id
吗?动态键入继承类的最佳方法是什么?
另外:这只是一个例子。我的课比这复杂得多。例如,类别不适用于我的实际问题。如果我使用上面Rectangle
,Shape
之上的抽象类,那会改变答案吗?
答案 0 :(得分:1)
如果你有一个已知的基类,那么你应该使用它。如果你正在进行鸭子打字,id很有用,但编译时检查总是一个很好的措施来防止错误。
id通常与协议一起使用。假设您有一个名为MyProtocol。然后你可以输入var作为id< MyProtocol>。这将允许编译器静态验证您的代码。