gpt4 book ai didi

iphone - 我的Objective-C异常不会导致我的应用终止,但是苹果公​​司会

转载 作者:行者123 更新时间:2023-12-01 18:02:51 25 4
gpt4 key购买 nike

在我的iOS(iPhone / cocos2d)项目中,我发现自己抛出的异常不会导致应用终止(它们只会导致当前函数退出,从而导致奇怪的半冻结行为)。例如,以下代码将导致崩溃:

NSArray* testArray = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
[testArray objectAtIndex:400];

运行该代码时,正如我期望的那样,我在控制台中得到以下内容:

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]'

但是,如果我尝试引发异常(例如,从断言中引发),除非启用了“在Objective-C异常中停止”,否则我将获得一半冻结。这对我来说很好,但是当我的测试人员报告问题时会引起问题-由于该应用没有崩溃,因此他们没有崩溃日志可发送给我。这是一个无效的异常示例:
NSException* e = [NSException exceptionWithName:NSInternalInconsistencyException 
reason:[NSString stringWithFormat:@"%s %@", __PRETTY_FUNCTION__,
[NSString stringWithFormat:@"Invalid argument"]] userInfo:nil];
[e raise];

禁用“在Objective-C上停止异常”功能后,这甚至都不会向控制台发送消息-使用NSAssert可以向我发送控制台消息,但仍然不会停止。因此,似乎由Cocoa类生成的异常行为正确,但是源自我的代码的异常却没有。

我已经检查了我的代码和cocos2d,没有发现似乎可以防止异常的任何@try块;有人有主意吗?

最佳答案

自定义异常应该与其他异常一样工作,并且我能够在自己的测试应用程序中对此进行验证。一些要检查的东西:

  • 确保未调用NSSetUnhandledExceptionHandler,以捕获所有未处理的异常。
  • 尝试在调试器之外运行您的应用程序。
  • 我已经在上面测试了您的代码,并且在引发并且未处理NSRangeException或自定义NSException时,我的应用程序按预期终止。
  • 尝试在其他地方引发异常以验证其是否正常运行,例如main()。

  • 注意:不要将异常用作控制程序流的方法,因为在Objective-C中引发异常会非常昂贵。

    关于iphone - 我的Objective-C异常不会导致我的应用终止,但是苹果公​​司会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271334/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com