0

从性能的角度来看,我怀疑哪个更好。

我有一个 aViewController 类型的变量,它包含一个 bViewController 对象。所以每次我需要在 bViewController 上调用一个方法时,我都会像 (bViewController *)aViewController.MethodName 一样调用它

我在想如果将 bViewController 存储在它自己类型的变量中并使用它进行类型转换会更好。

与类型转换相关的开销是多少?

4

1 回答 1

0

您似乎没有遵循标准命名约定,因此评论中出现了明显的混淆。这是我对你在做什么的猜测:

你说你有:

UIViewController *aViewController;

没有错 - 变量名以小写字母开头。然后你说你这样做:

aViewController = [[bViewController alloc] init];

这里bViewController大概是一个,因此按照惯例应该以大写字母开头。你也没有说这个类是如何定义的,但大概它是一个子类(纠正这种情况):

@interface BViewController : UIViewController

现在,在上面的分配之后,您希望调用定义的方法BViewController,因此编写:

((BViewController *)aViewController).propertyDefinedInBViewController

首先调用方法不是(通常)使用点语法完成的,即对于properties。其次,您需要额外的括号,否则您将转换属性调用的结果而不是aViewController.

这符合你正在做的事情吗?

如果是这样,你的问题是 - 类型转换的成本是多少?

从一种指针类型到另一种类型的类型转换没有任何成本,而值类型(整数、实数等)之间的类型转换可能涉及运行时转换并带来成本。您的情况是前者,因此运行时成本为零。但是,如果您要进行大量引用,我建议您使用正确类型的中间变量并只转换一次,这往往会提高可读性(开发时间成本)。此外,除非您检查过您是否确实拥有该类的实例,否则您不应强制转换为子类,例如:

if ([aViewController isKindOfClass:[BViewController class]])
{
   BViewController *myBViewController = (BViewController *)aViewController;
   ...
}

或者你的代码保证你有一个子类的实例,这是显而易见的或注释的。

HTH,我并没有完全猜错你在做什么!

于 2012-10-26T04:42:59.317 回答