isKindOfClass 在 PromiseKit 中返回 nil?

isKindOfClass returning nil inside PromiseKit?

我和我的同事正在构建一个主要基于 PromiseKit v1.5.3 的异步数据层。我们注意到在某些情况下,当从传递给 then 的块返回一个承诺(称之为 X)时,下一个 then 块实际上将 Promse X 作为参数传递给该块,而不是什么昔日的诺言竟下定决心。链接 thenable promises 是大多数 Promise 实现的一个非常重要的特性,所以我们非常惊讶。

经过一些相当冗长的调试会话后,我们发现问题出在 PromiseKit 中。在解析过程中,一个IsPromise调用未能将对象识别为promise,这实际上是对

的简单调用

[result isKindOfClass:[PMKPromise class]]

这个调用returnsnil,执行了一个不正确的分支。 Here's the source

令人困惑的是,我看不出有任何理由会发生这种情况。我不认为这是 PromiseKit 中的错误,因为他们的代码看起来很合理。我已经确认底层对象确实是一个 PMKPromise,因为它响应 valuefulfilled 等承诺方法。我什至使用调试器将它推送到正确的分支并从那里正确执行!

Here's an interesting log from some tests while halted at the given line.

鉴于 isKindOfClass 正在返回 nil,听起来该对象没有响应消息...但它肯定是一个 NSObject。我很好奇这是否可能是一个奇怪的编译器设置或其他东西。如果相关的话,我目前将优化设置为 none。有没有人见过这样的事情或知道发生了什么事?我应该检查什么?

isKindOfClass returns 当您设法在项目中两次具有相同的 class 时出现意外结果。所以你可能有一个 class PMKPromise 的对象,但它是一个不同的 class (具有完全相同的 class 名称,完全相同的行为,只是第二个 class) .也许这就是发生的事情。显然设置断点并检查对象是什么会有所帮助。