无法在iOS中投射UIView

时间:2012-06-05 16:16:42

标签: objective-c ios casting

我有一个名为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结果,知道为什么会发生这种情况吗?

2 个答案:

答案 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。