Ond*_*rka 4 exception objective-c nsexception
我有这个方法:
+ (MHTwitterParser*)createParser:(NSString*)format {
if ([format compare:@"json"] == NSOrderedSame) {
return [[MHJsonTwitterParser alloc] init];
}
[NSException raise:@"Unknown format" format:@"Unknown format of parser"];
}
Run Code Online (Sandbox Code Playgroud)
编译抱怨:
Control may reach end of non-void function
Run Code Online (Sandbox Code Playgroud)
这只是一个警告,但没关系.
明显的解决方法是在例如return nil;
之后添加[NSException raise: ...
.
但是,我认为它不是必需的(并且甚至会误导读者),因为异常被抛出,因此"控制可能达到非空函数的结束"并非如此.或者我错过了什么......?它只是编译器的不完善还是有一些相当大的原因呢?
编译器是Apple LLVM编译器3.1
原因很简单.
对于编译器,该方法[NSException raise: ...]
是黑盒方法.它不知道该方法实际上会引发异常.
如果将它与Java或C++进行比较,它们的throw
语句是一种语言特性,编译器会确切地知道发现它时会发生什么.在Obj-C中它有所不同,有时它取决于运行时条件.考虑以下.
NSException* exception = nil;
if (someCondition) {
exception = [NSException exceptionWithName:...];
}
[exception raise];
Run Code Online (Sandbox Code Playgroud)
编译器不知道是否真的引发了异常.