我有一个名为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结果,知道为什么会发生这种情况吗?
答案 0 :(得分:2)
Casting是一个编译时操作。它不会神奇地改变对象的类型。它主要用于编译时检查和一点运行时魔术。 myView
仍然是UIView
,而不是FooView
。
你问题中的这两行应该给你答案:
MyViewController的ivar是UIView类型。我得到了一个UIView结果
所有Objective-C对象都有一个名为isa
的指针,指向Class
类型的对象。转换不会改变该指针,也不会改变对象的大小。
如果要使用FooView
,则需要更改控制器中的属性类型,如果使用的是Interface Builder,请在右侧的检查器中更改UIView的类型。
答案 1 :(得分:0)
您可以在MyViewController中创建一个loadView方法,该方法创建一个FooView并将其设置为self.view。这是因为你没有使用NIB。