Objective-C:继承和动态类型?

时间:2011-10-31 22:49:03

标签: iphone objective-c ios inheritance

说我有两个班级:

@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吗?动态键入继承类的最佳方法是什么?

另外:这只是一个例子。我的课比这复杂得多。例如,类别不适用于我的实际问题。如果我使用上面RectangleShape之上的抽象类,那会改变答案吗?

1 个答案:

答案 0 :(得分:1)

如果你有一个已知的基类,那么你应该使用它。如果你正在进行鸭子打字,id很有用,但编译时检查总是一个很好的措施来防止错误。

id通常与协议一起使用。假设您有一个名为MyProtocol。然后你可以输入var作为id< MyProtocol>。这将允许编译器静态验证您的代码。