main 中的以下代码在捕获 UncaughtExceptions 方面做得很好——至少在 iOS 8 之前是这样。
int main(int argc, char * argv[])
{
@try {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}
@catch (NSException *exception) {
[[MyExceptionHandler sharedInstance] handleException:exception];
}
}
在 iOS 7 设备上运行相同的代码,任何未捕获的异常都由 main 中的 catch 块处理。但是在 iOS 8 中它根本没有被捕获。
如果我放置此代码:
void onUncaughtException(NSException* exception)
{
[[MyExceptionHandler sharedInstance] handleException:exception];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
NSSetUncaughtExceptionHandler(&onUncaughtException);
}
在我的 AppDelegate 中,我可以按预期捕获所有异常。我只是想知道@catch-in-main-approach 在 iOS 8 中停止工作的原因是什么(或者它可能与 64 位支持有关)?
问候,
基督教