objective-c - 哪个代码块是 'better' ?

标签 objective-c iphone performance for-loop conditional

为了养成良好的编程习惯,提高我的代码效率(阅读:“我和我哥在为一些代码争论”),我向有经验的程序员提出这个问题:

哪个代码块“更好”? 对于那些懒得阅读代码的人来说,是否值得在 for 循环中放置一个条件以减少冗余代码的数量,而不是将其放在外面并进行 2 个 for 循环?两段代码都有效,问题是效率与可读性。

    - (NSInteger)eliminateGroup {
            NSMutableArray *blocksToKill = [[NSMutableArray arrayWithCapacity:rowCapacity*rowCapacity] retain];
            NSInteger numOfBlocks = (NSInteger)[self countChargeOfGroup:blocksToKill];
            Block *temp;
            NSInteger chargeTotal = 0;

//Start paying attention here

            if (numOfBlocks > 3) 
                for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
                    temp = (Block *)[blocksToKill objectAtIndex:i];
                    chargeTotal += temp.charge;
                    [temp eliminate];
                    temp.beenCounted = NO;
                }
            }
            else {
                for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
                    temp = (Block *)[blocksToKill objectAtIndex:i];
                    temp.beenCounted = NO;
                }
            }   
            [blocksToKill release];
            return chargeTotal;
        }

或者...

        - (NSInteger)eliminateGroup {
            NSMutableArray *blocksToKill = [[NSMutableArray arrayWithCapacity:rowCapacity*rowCapacity] retain];
            NSInteger numOfBlocks = (NSInteger)[self countChargeOfGroup:blocksToKill];
            Block *temp;
            NSInteger chargeTotal = 0;

//Start paying attention here

            for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
                temp = (Block *)[blocksToKill objectAtIndex:i];
                if (numOfBlocks > 3) {
                    chargeTotal += temp.charge;
                    [temp eliminate];
                }
                temp.beenCounted = NO;
            }
            [blocksToKill release];
            return chargeTotal;
        }

请记住,这是一款游戏。只要用户双击屏幕,该方法就会被调用,for 循环通常运行 1 到 15 次迭代,最多 64 次。我知道这真的没那么重要,这主要是为了帮助我准确了解条件语句的成本。 (阅读:我只是想知道我是否正确。)

最佳答案

第一个代码块更清晰、更高效,因为在整个迭代过程中检查 numOfBlocks > 3 为真或假。

第二个代码块避免了代码重复,因此可能带来的风险较小。然而,它在概念上更复杂。

第二 block 可以通过添加来改进

bool increaseChargeTotal = (numOfBlocks > 3)

在循环之前,然后使用这个 bool 变量而不是循环内的实际检查,强调在迭代期间它不会改变的事实。

就个人而言,在这种情况下,我会投票给第一个选项(重复循环),因为循环体很小,这清楚地表明条件在循环之外;此外,它更高效并且可能符合“快速处理常见情况”的模式。

关于objective-c - 哪个代码块是 'better' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056563/

相关文章:

ios - 当 View 出现时创建一个 UILabel 并在 View 消失时销毁它

ios - 为什么 GCDAsyncUdpSocket 在广播模式下一段时间后无法发送/接收数据包?

iphone - 通过私有(private)框架/API 发送短信

performance - 如何向开发人员解释添加额外的 if - else if 条件并不是提高 "improve"可读性的好方法?

php - 使用空参数运行 PHP 搜索脚本会返回整个 MySQL 表

jboss - JBoss 5 关闭有什么作用?

ios - 根据条件导航到不同 View Controller 的按钮

ios - 如何通过整数获得垂直和水平对齐?

iphone - 如何在不使用 XCode 的情况下分发您的 iOS 应用程序进行测试?

iphone - 核心动画缩放速度异常缓慢?