我有一个名为FooView
的类,它是UIView
的子类,我正在尝试将UIView
对象转换为FooView
。
我这样做如下
FooView *myView = (FooView*) MyViewController.view
NSLog(@"Leg is a class of %@",NSStringFromClass([myView class])); // Get UIView here.
MyViewController
的 ivar 是一种UIView
类型。
我得到一个 UIView 结果,知道为什么会这样吗?
强制转换是一种编译时操作。它不会神奇地改变对象的类型。它主要用于编译时检查和一点运行时魔术。 myView
仍然是UIView
,而不是FooView
。
问题中的这两行应该会给你答案:
MyViewController 的 ivar 是 UIView 类型。我得到一个UIView结果
所有 Objective-C 对象都有一个名为 isa
的指针,指向类型为 Class
的对象。强制转换不会更改该指针,也不会更改对象的大小。
如果要使用 FooView
,则需要更改控制器中的属性类型,如果您使用的是界面生成器,请在右侧的检查器中更改 UIView 的类型。
您可以在 MyViewController 中创建一个 loadView 方法,该方法创建一个 FooView 并将其设置为 self.view。它适用于不使用 NIB 的情况。