gpt4 book ai didi

objective-c - 当错过来自 catch block 的 return 语句时,代码编译没有任何错误

转载 作者:太空狗 更新时间:2023-10-30 03:38:21 24 4
gpt4 key购买 nike

为什么下面的代码可以正常编译而没有任何错误?

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

最佳答案

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

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

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

编辑以解决此问题:

On any exception I need to return an empty NSArray after my @catch is executed.

您可以在您的@catch block 中放置另一个return 语句,以防出现异常。

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

关于objective-c - 当错过来自 catch block 的 return 语句时,代码编译没有任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com