Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 有多个函数调用而不是一个大函数调用会带来性能增益/损失吗?_Iphone_Objective C_Performance_Ipad_Cocos2d Iphone - Fatal编程技术网

Iphone 有多个函数调用而不是一个大函数调用会带来性能增益/损失吗?

Iphone 有多个函数调用而不是一个大函数调用会带来性能增益/损失吗?,iphone,objective-c,performance,ipad,cocos2d-iphone,Iphone,Objective C,Performance,Ipad,Cocos2d Iphone,我目前正在使用cocos2d、Box2D和Objective-C为iPad和iPhone制作一个游戏 每次更新都会发生很多事情,还有很多事情需要解决 我最近将很多代码重构为几个小方法,而不是在同一个方法中包含数百行代码 这样做会导致性能损失吗? 更少的方法调用会提高性能吗?当然,方法调用越多,性能就会下降。然而,这并不是使用更少代码的理由,这将是以牺牲更干净的代码为代价的预成熟优化 就我个人而言,我会选择最干净、最清晰的代码,让编译器进行优化,并最终针对真正的瓶颈进行配置 有一次,我是根据一个问

我目前正在使用cocos2d、Box2D和Objective-C为iPad和iPhone制作一个游戏

每次更新都会发生很多事情,还有很多事情需要解决

我最近将很多代码重构为几个小方法,而不是在同一个方法中包含数百行代码

这样做会导致性能损失吗?
更少的方法调用会提高性能吗?

当然,方法调用越多,性能就会下降。然而,这并不是使用更少代码的理由,这将是以牺牲更干净的代码为代价的预成熟优化

就我个人而言,我会选择最干净、最清晰的代码,让编译器进行优化,并最终针对真正的瓶颈进行配置



有一次,我是根据一个问题的答案被录用的,那就是在优化之前我会先做一个简介。:-)

由于堆栈帧调整和分支,每个函数调用都会导致一个恒定的时间(
O(1)
)延迟。但是,除非调用在时间关键型循环中进行了一百万次,否则您不会感觉到延迟

我认为,最好的方法是编写尽可能干净的代码,然后根据需要在分析器的帮助下对其进行优化


您可能还想看看这个答案:内联函数可以在不损害模块性的情况下稍微减少上述开销。

我看到过多个较小的函数导致代码性能显著提高的情况,因为编译器能够更好地优化寄存器。但高度依赖于编译器和编程风格


但一般来说,在现代系统(而不是真正的低级微处理器)上,在这个级别上优化性能是适得其反的。更好地构造代码(通常意味着相当数量的子例程),以便更可靠、更易于维护、更易于发现和修复更多全局性能问题。

编译器优化代码后,您可能不会注意到任何可靠的性能差异,除非您试图在CPU密集型计算例程(如DSP或像素级图像处理)的内部循环中使用方法调度。

当您完成重构时,您的计时告诉您什么?请参阅我的性能帖子,了解Objective-C消息发送的成本,与其他任务相比,这是如何进行的:如果您担心的是方法调用的数量,而不是纹理的大小之类的问题,我认为你在一个好地方:)+1我曾经制作了一个彩票模拟器,它会循环数百万次,我对它进行了编码,一次在循环中调用不同的方法,另一次作为一个大代码块。事实证明,一个大的代码块速度更快,因此“但是,除非调用在一个时间关键型循环中进行了一百万次,否则您不会感觉到延迟。”