为什么以下代码编译没有任何错误?
- (NSArray *) getSomeObjects
{
@try
{
NSArray * arrayToReturn = [NSArray array];
// Perform some oprations on arrayToReturn
return arrayToReturn;
}
@catch (NSException * exception)
{
// Uh Oh!!! I got an exception.
}
// See I am not returning anything from here
// and code still compiles fine without any
// compiler error.
}
在执行@catch之后,我需要返回一个空的NSArray。
Xcode中是否有任何编译器标志警告这些丢失的返回语句为错误?
答案 0 :(得分:2)
就编译器而言,在return
块中始终在正常执行期间达到@try
语句。它没有想到'哦,这一行可能有异常,因此下一行的return
语句永远不会达到'。否则,需要对具有返回值的所有方法发出警告:)
try / catch块不会改变它。
至少,这是我理解它的方式。我欢迎任何人纠正我/扩展这个/更好地解释它。
编辑以解决此问题:
在执行@catch之后,我需要返回一个空的NSArray。
如果有异常,您可以在return
块中添加另一个@catch
语句。
有趣的是,您不希望在return
块中添加其他@finally
用于此目的,因为这会覆盖/取代/替换return
中的@try
阻止,即使正常到达@try
块中的那个。