iOS中条件语句的优化
来源:互联网 发布:叮当软件制作教程 编辑:程序博客网 时间:2024/05/20 19:32
本文会不定期更新,转载请注明出处http://blog.csdn.net/uxyheaven/article/details/47780957
iOS中条件语句的优化
要求判断一个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 清晰多了.
当一些条件语句难以让人看清他的目的时,
- (void)showName:(NSString *)name{ if (name != nil) { if (name.length > 0) { NSLog(@"showName"); } else { NSLog(@"name.length is zero"); } } else { NSLog(@"name is nil"); }}
我们可以用卫语句来使得主体逻辑更加清晰
- (void)showName:(NSString *)name{ if (name == nil) { NSLog(@"name is nil"); return; } if (name.length == 0) { NSLog(@"name.length is zero"); return; } NSLog(@"showName");}
我们还可以用三目来优化代码,当然了这个只是说可以,实际不建议用.
如果真的的要用,请按照这种写法:
BOOL b = YES; // 普通写法 if (b) { printf("11"); } else { printf("22"); } // 三目写法 (b) ? ({ printf("11"); }) : ({ printf("22"); });
2 0
- iOS中条件语句的优化
- 条件语句的优化
- 条件语句的优化(旧)
- javascript中对条件判断语句的优化
- javascript中对条件判断语句的优化
- js优化嵌套的条件语句
- 从条件语句和循环语句的条件入手,优化程序
- PHP中if条件语句的用法
- C语言条件语句优化
- sql语句where条件优化
- mySql的条件语句
- make的条件语句
- Ansible的条件语句
- 【转】ACCESS中如何在SQL语句的WHERE条件中加日期条件
- SQL 查询语句中交叉条件的应用!
- SQL 查询语句中交叉条件的应用!
- C语言中常见的7种条件编译语句
- delphi中多条件SQL语句的增加注意事项
- 九度OJ 题目1073:杨辉三角形
- Android cookies正确的更新方式
- HDU—1285- 确定比赛名次(拓扑排序)
- Java性能优化(1):用静态方法代替构造函数
- 使用PitStop去掉pdf的xobject类型的"水印"
- iOS中条件语句的优化
- SpringMVC -jquery实现分页
- java Ant build.xml
- 栈和队列
- FLASH AS3.0监听事件
- YUV主要采样格式理解
- 测试人员的职业规划
- QT window xp 下打不开文件对话框解决
- ECSHOP二次开发必备手册【ECSHOP数据库表结构完整版】