gpt4 book ai didi

objective-c - Objective-C 中的消息分发成本

转载 作者:太空狗 更新时间:2023-10-30 03:46:59 25 4
gpt4 key购买 nike

我很想知道在各种情况下 Objective-C 中的消息调度成本。特别是我想指导我对程序设计的选择,这样我就不会试图通过避免消息分派(dispatch)来过早优化,因为它们会带来更好的设计。

我当前项目中的一个案例是我有一个带有实例变量的类:offsetX 和 offsetY。我经常想要绝对偏移量,目前我到处都有这行代码:-

int absOffset = ((offsetX < 0.0) ? -offsetX : offsetX) + 
((offsetY < 0.0) ? -offsetY : offsetY);

现在,如果这是 C++,我将创建一个返回 absOffset 值的内联函数。即使在 Java/C# 中,我也可以将这样的函数定义为 final/sealed 并且非常确定它会被内联。

Objective-C 将是:-

-(int)absOffset {
return ((offsetX < 0.0) ? -offsetX : offsetX) +
((offsetY < 0.0) ? -offsetY : offsetY);
}

我会这样调用它:-

int ao = [self absOffset];

现在,编译器是否能够内联它?我假设它至少能够将其修复为直接函数调用并避免(我假设)objective-c 必须使用的动态消息分派(dispatch),因为它是类型系统。

此外,一般来说,在 Objective-C 中消息分发的成本是多少?通过“id”调用与通过指向具体类的指针调用有区别吗?

最佳答案

Objective C messages are very fast.速度可与 C++ 虚拟方法调用相媲美,尽管速度不那么快。避免消息传递是绝对过早的优化。您可能不想在内部循环中做很多事情,但是您选择的算法和其他因素将对您的代码速度产生更大的影响。如果它太慢,请使用分析器并从那里开始。

关于objective-c - Objective-C 中的消息分发成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/907843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com