当从catch块中错过return语句时,代码编译时没有任何错误

时间:2014-05-28 00:40:04

标签: objective-c try-catch

为什么以下代码编译没有任何错误?

- (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中是否有任何编译器标志警告这些丢失的返回语句为错误?

1 个答案:

答案 0 :(得分:2)

就编译器而言,在return块中始终在正常执行期间达到@try语句。它没有想到'哦,这一行可能有异常,因此下一行的return语句永远不会达到'。否则,需要对具有返回值的所有方法发出警告:)

try / catch块不会改变它。

至少,这是我理解它的方式。我欢迎任何人纠正我/扩展这个/更好地解释它。

编辑以解决此问题:

  

在执行@catch之后,我需要返回一个空的NSArray。

如果有异常,您可以在return块中添加另一个@catch语句。

有趣的是,您不希望在return块中添加其他@finally用于此目的,因为这会覆盖/取代/替换return中的@try阻止,即使正常到达@try块中的那个。