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

gag*_*wal 7 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.
}
Run Code Online (Sandbox Code Playgroud)

在任何异常中,我需要在执行@catch后返回一个空的NSArray.

Xcode中是否有任何编译器标志警告这些丢失的返回语句为错误?

Joe*_*yer 2

对于编译器来说,正常执行时总会到达块return中的语句。@try它不会认为“哦,这一行可能有异常,因此return永远不会到达下一行的语句”。否则,需要对所有具有返回值的方法发出警告:)

try/catch 块不会改变这一点。

至少,我是这么理解的。我欢迎任何人纠正我/对此进行扩展/更好地解释它。

编辑以解决此问题:

对于任何异常,我需要在执行 @catch 后返回一个空的 NSArray。

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

有趣的是,您不想为此目的return在块中放置另一个块,因为这将覆盖/取代/替换块中的块,即使正常到达块中的块也是如此。@finallyreturn@try@try