Typecasting多次与单指针

时间:2012-10-25 23:39:42

标签: objective-c ios xcode

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您似乎没有遵循标准命名约定,因此注释中出现了混淆。这是我对你所做的事情的猜测:

你说你有:

UIViewController *aViewController;

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

aViewController = [[bViewController alloc] init];

此处bViewController可能是,因此按惯例应以大写字母开头。你也没有说明这个类是如何定义的,但可能它是一个子类(纠正案例):

@interface BViewController : UIViewController

现在,在上面的作业之后,您希望调用BViewController中定义的方法,然后写:

((BViewController *)aViewController).propertyDefinedInBViewController

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

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

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

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

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

您的代码保证您拥有子类的实例并且显而易见或已注释。

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