Objc中处理数组越界的一种办法
2016-01-04 12:54
211 查看
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
Objc的数组如果在访问时索引非法,则会抛出NSRangeException异常,貌似没有妥协的办法.
这个不像ruby,对于数组的访问有2套API,一种和Objc类似非法异常铁定报错;另外一种出现异常只是返回一个非法的值,这也很方便,尤其在某些情况下.
一般的在Objc中如果想要处理这种情况,可以在每次访问前检查Index是否合法,但还有一种方法,就是写捕获异常的处理代码,如下:
//重新调整当前地图中队伍的顺序 -(void)reorderPlayers{ //其他处理代码... GameCharacter *followGC = nil; GameCharacter *targetGC = _panda; NSInteger maxFollowCount = MIN(2, gd.players.count-1); for (int i = 1; i <= maxFollowCount; i++) { className = gd.players[i][@"playerName"]; followGC = [GameCharacter gcWithName:className wihtGameScene:_gameScene]; NSDictionary *dict; @try { //如果之前在游戏中添加了新的角色(之前地图中只有1个,现在内部数据变为2个)则必须处理数组访问异常 dict = [orgPlayers objectAtIndex:i]; followGC.position = [dict[@"Position"] CGPointValue]; [followGC setFaceDirection:[orgPlayers[i][@"FaceTo"] intValue]]; [followGC followInPlace:targetGC]; } @catch (NSException *exception) { if ([exception.name isEqualToString:@"NSRangeException"]) { CCLOG(@"A NSRangeException happened!"); //如果出现范围异常表示followGC是新添加的角色,我们调用follow而不是followInPlace方法 [followGC follow:targetGC]; }else{ @throw [NSException exceptionWithName:@"otherErr" reason:@"otherErr" userInfo:nil]; } } [_bgLayer addChild:followGC]; targetGC = followGC; } }
代码其他的游戏逻辑不用去管,主要看其中的异常捕获和处理方法.
在注释那行之后可能发生索引非法的异常,所以我们用@try…@catch机制对其进行捕获,在发生异常时我们做变通处理,否则代码流保持不变.
注意,这里没有用到@finally块,因为没有那个必要.
相关文章推荐
- Objc中处理数组越界的一种办法
- Objc中处理数组越界的一种办法
- 高低版本方法兼容
- Bootstrap下拉菜单
- 前端资源
- css/3 背景详解
- 2016-01-06 学习笔记
- 局域网windows平台下时间同步
- Linux 系统应用编程——出错处理(errno)
- Android:BroadcastReceiver:采用广播接收者实现短信窃听器
- Fragment常用方法
- Eclipse中如何清除EGit记住的GitHub用户名和密码
- UIView
- Linux大数据开发基础:第四节:Linux文件系统(二)
- 读取并创建excel文件(.xls)
- iOS UIScrollView的属性
- 黑马程序员-OC的内存管理笔记
- (转)java中String的常见用法
- cuda测试示例
- 使用Memcache在PHP中调试方法的介绍及应用