0

我有一个名为FooView的类,它是的子类,UIView我正在尝试将UIView对象转换为FooView.

我这样做如下

FooView *myView = (FooView*) MyViewController.view
NSLog(@"Leg is a class of %@",NSStringFromClass([myView class])); // Get UIView here.

的 ivarMyViewController是一种UIView类型。

我得到一个 UIView 结果,知道为什么会这样吗?

4

2 回答 2

2

强制转换是一种编译时操作。它不会神奇地改变对象的类型。它主要用于编译时检查和一点运行时魔法。myView仍然是一个UIView,不是一个FooView

您问题中的这两行应该会给您答案:

MyViewController 的 ivar 是一个 UIView 类型。我得到一个 UIView 结果

所有 Objective-C 对象都有一个指针isa,它指向一个类型为 的对象Class。强制转换不会更改该指针,也不会更改对象的大小。

如果您想使用 a FooView,您需要更改控制器中的属性类型,如果您使用的是 Interface Builder,请在右侧的检查器中更改 UIView 的类型。

于 2012-06-05T16:21:56.763 回答
0

您可以在 MyViewController 中创建一个 loadView 方法,该方法创建一个 FooView 并将其设置为 self.view。它适用于您不使用 NIB 时。

于 2012-06-05T19:40:04.257 回答