Objective-C中具有可变范围的意外行为

时间:2015-11-20 12:08:41

标签: objective-c llvm

我在此代码中遇到了“尝试将nil插入数组”的消息。

if (bookingID) {
    SBRequest *request = [[SBSession defaultSession] editBooking:bookingData callback:callbak];
    [pendingRequests addObject:request.requestID];
    [[SBSession defaultSession] performReqeust:request];
}
else {
    SBRequest *request = [[SBSession defaultSession] book:sbookingData callback:callbak];
    [pendingRequests addObject:request.requestID];
    [[SBSession defaultSession] performReqeust:request];
}

第4行(performRequest:方法内部)发生崩溃。这意味着request参数为nil。但这也意味着崩溃应该发生在第3行,因为requestID也应该是nil。我使用过调试器并看到了这张图片:

enter image description here

看起来我有两个request个变量,其中一个是nil。我通过在if / else作用域中重命名变量来解决问题。因此,在某些原因,编译器会在'if'和'else'范围内创建变量。并且在某些时候使用'if'范围内的'else'范围内的变量。

这是编译器的错误吗?变量范围如何在Objective-C中起作用?

Xcode版本7.1.1(7B1005)。我使用编译器的默认配置(Apple LLVM 7.0)。除语言方言GNU99外没有自定义编译器标志。

0 个答案:

没有答案
相关问题