使用If语句在ios开发中是否会影响性能?

使用If语句在ios开发中是否会影响性能?,ios,xcode,Ios,Xcode,我正在调试我的游戏代码。我正在为iOS开发一个游戏,我的代码使用了很多IF语句。我想知道在使用这些工具时,是否会对性能造成很小的影响 谢谢当然,分支时会影响性能 但是,没有分支机构,就无法制定合理的程序 因此,请使用if,如果通过分析您的程序在代码中的特定位置检测到问题,请尝试查看是否可以减少分支的数量或将其排除在循环之外。但只要代码保持清晰,就不要太在意它 大多数情况下,大量if的第一个影响是可读性和可维护性。但是在这些主题上,过早的优化往往是一个更大的打击。当然,分支时会对性能造成影响 但是

我正在调试我的游戏代码。我正在为iOS开发一个游戏,我的代码使用了很多IF语句。我想知道在使用这些工具时,是否会对性能造成很小的影响


谢谢

当然,分支时会影响性能

但是,没有分支机构,就无法制定合理的程序

因此,请使用
if
,如果通过分析您的程序在代码中的特定位置检测到问题,请尝试查看是否可以减少分支的数量或将其排除在循环之外。但只要代码保持清晰,就不要太在意它


大多数情况下,大量
if
的第一个影响是可读性和可维护性。但是在这些主题上,过早的优化往往是一个更大的打击。

当然,分支时会对性能造成影响

但是,没有分支机构,就无法制定合理的程序

因此,请使用
if
,如果通过分析您的程序在代码中的特定位置检测到问题,请尝试查看是否可以减少分支的数量或将其排除在循环之外。但只要代码保持清晰,就不要太在意它


大多数情况下,大量
if
的第一个影响是可读性和可维护性。但是,过早优化通常对这些主题的影响更大。

这取决于您在哪里使用if语句,以正确的方式使用if有一定的性能

我将陈述其中一些

  • 如果最有可能发生在其他情况之前,请始终使用“如果”选项,使用之前更常见的情况,然后使用不太可能发生的情况
  • 尝试在循环之前使用if, 比如说
而不是这个

BOOL isCase1 = [self isCase1];
for (int i = 0 ; i < 10000 ; i ++)
{
   if(isCase1)
   {
       //do something
   }
   else
   {
      //do some other thing
   }
}
BOOL-isCase1=[self-isCase1];
对于(int i=0;i<10000;i++)
{
如果(isCase1)
{
//做点什么
}
其他的
{
//做些别的事
}
}
用这个

   BOOL isCase1 = [self isCase1];

   if(isCase1)
   {
       for (int i = 0 ; i < 10000 ; i ++)
       {
       }
   }
   else
   {
       for (int i = 0 ; i < 10000 ; i ++)
       {
       }
   }
BOOL-isCase1=[self-isCase1];
如果(isCase1)
{
对于(int i=0;i<10000;i++)
{
}
}
其他的
{
对于(int i=0;i<10000;i++)
{
}
}
如果您确信某些代码导致性能问题,那么在确定大多数情况下您的性能都很好之前,不要假设您需要改进性能(不要过早优化代码)

这些是一些案例,还有更多

更新:

您还可以做一些其他有用的事情,缓存布尔检查语句

比如说

而不是

for (int i = 0 ; i < 10000 ; i ++)
{
   if([self isCase1]) //Do some thing
}
for(int i=0;i<10000;i++)
{
如果([self isCase1])//做点什么
}
使用

//将结果缓存在变量中
BOOL isCase=[self isCase1];
对于(int i=0;i<10000;i++)
{
如果(isCase)//做点什么
}

这取决于您在哪里使用if语句,以正确的方式使用if有一定的性能

我将陈述其中一些

  • 如果最有可能发生在其他情况之前,请始终使用“如果”选项,使用之前更常见的情况,然后使用不太可能发生的情况
  • 尝试在循环之前使用if, 比如说
而不是这个

BOOL isCase1 = [self isCase1];
for (int i = 0 ; i < 10000 ; i ++)
{
   if(isCase1)
   {
       //do something
   }
   else
   {
      //do some other thing
   }
}
BOOL-isCase1=[self-isCase1];
对于(int i=0;i<10000;i++)
{
如果(isCase1)
{
//做点什么
}
其他的
{
//做些别的事
}
}
用这个

   BOOL isCase1 = [self isCase1];

   if(isCase1)
   {
       for (int i = 0 ; i < 10000 ; i ++)
       {
       }
   }
   else
   {
       for (int i = 0 ; i < 10000 ; i ++)
       {
       }
   }
BOOL-isCase1=[self-isCase1];
如果(isCase1)
{
对于(int i=0;i<10000;i++)
{
}
}
其他的
{
对于(int i=0;i<10000;i++)
{
}
}
如果您确信某些代码导致性能问题,那么在确定大多数情况下您的性能都很好之前,不要假设您需要改进性能(不要过早优化代码)

这些是一些案例,还有更多

更新:

您还可以做一些其他有用的事情,缓存布尔检查语句

比如说

而不是

for (int i = 0 ; i < 10000 ; i ++)
{
   if([self isCase1]) //Do some thing
}
for(int i=0;i<10000;i++)
{
如果([self isCase1])//做点什么
}
使用

//将结果缓存在变量中
BOOL isCase=[self isCase1];
对于(int i=0;i<10000;i++)
{
如果(isCase)//做点什么
}

而且几乎总是,重要的不是分支本身,而是评估条件。考虑它们的顺序和重复性可能会有所帮助(关于过早优化的警告适用)。而且几乎总是,分支本身并不重要,而是评估条件。考虑它们的顺序和重复性可能会有所帮助(关于过早优化的警告适用)。+1对于从循环中提取内容的示例(也适用于所有其他事情,而不仅仅是if语句)。请注意,一个好的编译器已经可以执行此优化,因此,请先检查,否则您只会毫无意义地混淆代码。@PaulR如果您确定编译器可以做到这一点,请发布一些参考,此外,我在上面已经说过,在100%确定代码存在性能问题之前,我不会这样做:)@Omar:我曾经用它作为优化课程的教学示例,但近年来不得不放弃它,因为(a)gcc和其他编译器现在负责这种转换,以及(b)现代CPU中的分支预测已经改进到了这样一个地步:即使编译器不进行转换,分支预测也往往毫无益处。10年前,这是一个非常有用的优化,技术不会停滞不前。@PaulR我完全同意你的观点,大多数优化都不应该做,代码应该在考虑性能之前就被人阅读,但在某些特定情况下,当剖析器指向一段代码时,该代码包含类似于t的内容