Objective-C中条件语句的优化

本文会不定期更新,转载请注明出处http://blog.csdn.net/uxyheaven/article/details/47780957

Objective-C中条件语句的优化

要求判断一个NSArray有值,严谨的写法是

    NSString *object = @"";

    if (object && [object isKindOfClass:[NSArray class]] && ((NSArray *)object).count > 0)
    {
        NSLogDD
    }

先判断这个object非空,再判断是NSArray类型,再判断count>0,如果顺序写成

    NSString *object = @"";

    if (object && ((NSArray *)object).count > 0 && [object isKindOfClass:[NSArray class]])
    {
        NSLogDD
    }

则会运行错误,因为if里的代码是串行.

因此,对于多条件的if语句,尤其是大量运行的,我们可以调整 (条件) 的顺序,来改善代码效率.如:

    [scores enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if (obj > 59 && obj != 100)
        {
            NSLogDD
        }
    }];

当我们取考试及格,但是又不是满分的人,通常情况下就可以把 > 59 放到前面(通常情况下满分的人少).

当一段逻辑有多个if出现的情况,如:

+(UIControlEvents)eventWithName:(NSString *)name
{
    if([name isEqualToString:@"UIControlEventTouchDown"])           return UIControlEventTouchDown;
    if([name isEqualToString:@"UIControlEventTouchDownRepeat"])     return UIControlEventTouchDownRepeat;
    if([name isEqualToString:@"UIControlEventTouchDragInside"])     return UIControlEventTouchDragInside;
    if([name isEqualToString:@"UIControlEventTouchDragOutside"])    return UIControlEventTouchDragOutside;
    if([name isEqualToString:@"UIControlEventTouchDragEnter"])      return UIControlEventTouchDragEnter;
    if([name isEqualToString:@"UIControlEventTouchDragExit"])       return UIControlEventTouchDragExit;
    if([name isEqualToString:@"UIControlEventTouchUpInside"])       return UIControlEventTouchUpInside;
    if([name isEqualToString:@"UIControlEventTouchUpOutside"])      return UIControlEventTouchUpOutside;
    if([name isEqualToString:@"UIControlEventTouchCancel"])         return UIControlEventTouchCancel;
    if([name isEqualToString:@"UIControlEventTouchDown"])           return UIControlEventTouchDown;
    if([name isEqualToString:@"UIControlEventValueChanged"])        return UIControlEventValueChanged;
    if([name isEqualToString:@"UIControlEventEditingDidBegin"])     return UIControlEventEditingDidBegin;
    if([name isEqualToString:@"UIControlEventEditingChanged"])      return UIControlEventEditingChanged;
    if([name isEqualToString:@"UIControlEventEditingDidEnd"])       return UIControlEventEditingDidEnd;
    if([name isEqualToString:@"UIControlEventEditingDidEndOnExit"]) return UIControlEventEditingDidEndOnExit;
    if([name isEqualToString:@"UIControlEventAllTouchEvents"])      return UIControlEventAllTouchEvents;
    if([name isEqualToString:@"UIControlEventAllEditingEvents"])    return UIControlEventAllEditingEvents;
    if([name isEqualToString:@"UIControlEventApplicationReserved"]) return UIControlEventApplicationReserved;
    if([name isEqualToString:@"UIControlEventSystemReserved"])      return UIControlEventSystemReserved;
    if([name isEqualToString:@"UIControlEventAllEvents"])           return UIControlEventAllEvents;
    return UIControlEventAllEvents;
}

我们可以通过 把多个if 改成if () else if… 来优化逻辑,同样可以合理的安排条件的顺序.

还有一种更加优美的方法,用字典来代替if, 如

    XY_DicControlStringEvent = [@{@"UIControlEventTouchDown": @(UIControlEventTouchDown),
                                 @"UIControlEventTouchDownRepeat": @(UIControlEventTouchDownRepeat),
                                 @"UIControlEventTouchDragInside": @(UIControlEventTouchDragInside),
                                 @"UIControlEventTouchDragOutside": @(UIControlEventTouchDragOutside),
                                 @"UIControlEventTouchDragEnter": @(UIControlEventTouchDragEnter),
                                 @"UIControlEventTouchDragExit": @(UIControlEventTouchDragExit),
                                 @"UIControlEventTouchUpInside": @(UIControlEventTouchUpInside),
                                 @"UIControlEventTouchUpOutside": @(UIControlEventTouchUpOutside),
                                 @"UIControlEventTouchCancel": @(UIControlEventTouchCancel),
                                 @"UIControlEventValueChanged": @(UIControlEventValueChanged),
                                 @"UIControlEventEditingDidBegin": @(UIControlEventEditingDidBegin),
                                 @"UIControlEventEditingChanged": @(UIControlEventEditingChanged),
                                 @"UIControlEventEditingDidEnd": @(UIControlEventEditingDidEnd),
                                 @"UIControlEventEditingDidEndOnExit": @(UIControlEventEditingDidEndOnExit),
                                 @"UIControlEventAllTouchEvents": @(UIControlEventAllTouchEvents),
                                 @"UIControlEventAllEditingEvents": @(UIControlEventAllEditingEvents),
                                 @"UIControlEventApplicationReserved": @(UIControlEventApplicationReserved),
                                 @"UIControlEventSystemReserved": @(UIControlEventSystemReserved),
                                 @"UIControlEventAllEvents": @(UIControlEventAllEvents)
                                 }  retain];
+(UIControlEvents)eventWithName:(NSString *)name
{
    return [[XY_DicControlStringEvent objectForKey:name] integerValue];
}

这里虽然有个装箱拆箱的过程,但是逻辑比大量的 if 清晰多了.

我们还可以用三目来优化代码,当然了这个只是说可以,实际不建议用.

如果真的的要用,请按照这种写法:

    BOOL b = YES;

    // 普通写法
    if (b)
    {
        printf("11");
    }
    else
    {
        printf("22");
    }

    // 三目写法
    (b) ?
    ({
        printf("11");
    })
    :
    ({
        printf("22");
    });

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 08:45:28

Objective-C中条件语句的优化的相关文章

Java中条件语句和if-else的嵌套原则

if(condition)Statement 在此时的条件语句中的条件是需要用括号把它括起来.   其实,Java中的条件语句和C/C++中的是一样的.而Java常常希望在某个条件为真的时候执行多条语句.此时,我们就会引入一个概念,那就是"块模块(block statement)",具体格式如下,仅供参考: { statement1 statement2 ... } 就拿下面的例子,我们来试试上面的这个格式吧! if(score>=90) system.out.println(&

MySQL中SQL语句常见优化策略

1.避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.避免判断null 值应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num 上设置默认值0,确保表中num 列没有null 值,然后这样查询: select id from t where num=0 3.避免不等值判断应尽量避免在where

Go语言【第五篇】:Go条件语句

Go语言条件 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句.下图展示了程序语言中条件语句的结构: Go语言提供了以下几种条件判断语句: 语句 描述 if语句 if语句由一个布尔表达式后紧跟一个或多个语句组成 if...else语句 if语句后可以使用可选的else语句,else语句中的表达式在布尔表达式为false时执行 if嵌套语句 可以在if或else if语句中嵌入一个或多个if或else if语句

javascript中对条件判断语句的优化

不管写什么程序,平时都会用到条件语句,如:if...else... switch这样的语句,来达到对条件的判断.下面看来一段代码: function abc(test){ if (test == 1){ console.log('test的值是'+test); } else if (test == 2){ console.log('test的值是'+test); } else if (test == 3){ console.log('test的值是'+test); } else if (test

R中的运算符,条件语句,控制语句

1.运算符 算术运算符:+,-,*,/ 关系运算符:==,!=,>,>=,<,<= 逻辑运算符:&,|,&&,||,! &和|称为短逻辑符,&&及||称为长逻辑符.长逻辑符只比较左边和右边的第一个元素,而短逻辑符将会一 一比较所有的元素. 2.条件语句:if ..else if(boolean_expression) { statement(s) } else{ statement(s)}或多个条件 if(boolean_expres

js中的条件语句

1 //js中的条件语句 2 3 var age=60; 4 5 6 //example1 单分支语句 7 if(age>30){ 8 console.log("你已经不年轻了!"); 9 }else{ 10 console.log("你依然很有活力!"); 11 } 12 13 14 //example2 多分子语句 当程序执行到第一个满足条件的情况下就不再往下判断 15 16 if(age>40&&age<=60){ 17 co

js 中的流程控制-条件语句

条件语句: if(exp)执行一句代码 1 <script> 2 var x = 1 ; 3 if(x == 1 ) //当if判断语句结果是true 或者 false 当判断结果等于true的时候,执行一句语句 4 document.write("x真的等于1") //=>x真的等于1 5 </script> if(exp){执行代码段} 1 <script> 2 var x = 1 ; 3 if(x == 1 ){ //当if判断语句结果是

js中的运算符和条件语句

js中的运算符大体上可以分为4类:1算术运算符.2一元操作符.3比较运算符.4逻辑运算符. 算术运算符一般指的是加减乘除求余这五种操作符:+,-,*,/,%.通过算术运算符可以对js中的变量进行操作.如: var a=100,b,c,d,e,f; b= a+10; //110 c=a-10; //90 d=a*10; //1000 e=a/10; //10 f=a%3; //1 一元操作符指的是只能操作一个值的操作符:如i++,i--,++i,--i;在这里要注意区别i++与++i: var a

java中switch语句中的defaul条件的位置

在java中switch语句中,每个case分支就是一个入口,如果都没有满足条件,那么将会走到default分支中.那么这个default分支的位置会不会影响到执行的流程呢? package com.app.statement; import java.util.Scanner; /**  * Created by charles on 2015/7/12.  */ public class SwitchTest {     public static void main(String[] ar