Ale*_*aud 1 iphone exception objective-c ios
在我的iOS(iPhone/cocos2d)项目中,我发现我自己抛出的异常不会导致应用程序终止(它们只会导致当前函数退出,这会导致奇怪的半冻结行为).例如,以下代码导致崩溃:
NSArray* testArray = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
[testArray objectAtIndex:400];
Run Code Online (Sandbox Code Playgroud)
当我运行该代码时,我在控制台中得到以下内容,正如我所期望的那样:
2011-06-07 12:55:20.421 mansion-iphone[38184:207] *** Terminating app due to
uncaught exception 'NSRangeException', reason: '*** -[NSArray
objectAtIndex:]: index 400 beyond bounds [0 .. 2]'
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试引发异常(例如来自断言),除非我启用了"停止Objective-C异常",否则我会得到半冻结.这对我来说很好,但是当我的测试人员报告问题时会导致问题 - 因为应用程序没有崩溃,他们没有崩溃日志来发送给我.这是一个不起作用的异常示例:
NSException* e = [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"%s %@", __PRETTY_FUNCTION__,
[NSString stringWithFormat:@"Invalid argument"]] userInfo:nil];
[e raise];
Run Code Online (Sandbox Code Playgroud)
关闭"停止Objective-C异常",这甚至不会向控制台发出消息 - 使用NSAssert会给我一个控制台消息,但仍然没有停止.因此,似乎Cocoa类生成的异常行为正确,但源自我的代码的异常不是.
我检查了我的代码和cocos2d,但没有发现任何似乎阻止异常的@try块; 有谁有想法?
自定义异常应该与其他异常一样工作,并且我能够在我自己的测试应用程序中验证这一点.有些事要检查:
NSSetUnhandledExceptionHandler没有被调用,以捕获所有未处理的异常.注意:不要使用异常作为控制程序流的方法,因为它们在Objective-C中引发时非常昂贵.
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |