首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次类型转换与单指针类型转换

多次类型转换与单指针类型转换
EN

Stack Overflow用户
提问于 2012-10-26 07:39:42
回答 1查看 119关注 0票数 0

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

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

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

与类型转换相关的开销是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-26 12:42:59

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

你说你有:

代码语言:javascript
复制
UIViewController *aViewController;

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

代码语言:javascript
复制
aViewController = [[bViewController alloc] init];

这里bViewController大概是一个类,因此按照惯例应该以大写字母开头。您也没有说明这个类是如何定义的,但假设它是一个子类(更正大小写):

代码语言:javascript
复制
@interface BViewController : UIViewController

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

((BViewController *)aViewController).propertyDefinedInBViewController

第一次调用方法(通常)不是使用点语法完成的,这是针对属性的。其次,您需要额外的圆括号,否则您将强制转换属性调用的结果,而不是aViewController

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

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

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

代码语言:javascript
复制
if ([aViewController isKindOfClass:[BViewController class]])
{
   BViewController *myBViewController = (BViewController *)aViewController;
   ...
}

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13078902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档