答案 0 :(得分:3)
TL; DR ,如果没有大小写匹配,该函数会将控制权返回给调用方,但返回值是 undefined
C / ObjC return
语句从根本上做两件事。它使它的值放在特定的位置,以便调用者知道在哪里寻找它。 (该位置由平台/语言ABI定义。)然后将控制移回调用函数(通过从堆栈中弹出地址并跳转到该地址)。
在这种情况下,控制权将直接越过switch
的末尾,并且不会执行任何return
语句。但是,编译器确实会在方法结束时发出跳转。
(实际上-我不太擅长阅读汇编器,但是-我看到Xcode 10.1为您的代码创建的带有调试注释的汇编器将所有开关情况集中到该方法的单个出口点。如果所有案例比较均未成功,则还 到达出口点。)
但是我们在没有将任何值放入返回寄存器的情况下进行了跳转,这意味着它与任何其他未初始化的值相同-垃圾。您可靠地获得nil
的事实可能是由于测试程序的简单性和在调试配置中构建的简单性中的一个或两个。