我在处理 Swift 项目时注意到奇怪的行为。除了 Swift 有时会调用错误的方法外,我无法解释。这种情况非常罕见,即使在代码中添加空行也可能导致此错误消失。
让我在截图中解释一下我的意思,接下来我使用可以在 Github 上找到的 SwiftDDP 项目的 CoreData 示例,但是我在自己的项目中能够看到这样的问题。
我们在 Todos.swift:74
可以看到断点,我希望下一次调用应该是 MeteorClient
的 getId()
方法> 类,因为它已经被实例化了:
在 Step Into 之后,您可以看到同一实例的 ping()
被调用:
接下来的两步导致 EXC_BAD_ACCESS
异常:
在我的项目中,在我停止使用单例之前,我经常看到这个问题,所以它可能与 Swift 静态内存使用有关,或者我不明白这并不奇怪,因为我对多线程和内存管理没有什么经验。
我的环境是:
- 应用代码 OC-145.184.11
- Xcode 版本 7.2.1 (7C1002)
- iOS 9.2 SDK
- Apple Swift 版本 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81)
注意:我在这里使用 AppCode,但我在 Xcode 中看到的行为相同,如果在 Xcode 中重现的相同问题无法在 AppCode 中重现,甚至更多。
如果有人能向我解释这种奇怪的行为,我将不胜感激。
谢谢!
最佳答案
这刚刚发生在我的团队中,使用的是 Swift 2.2。这真是不可思议。这不是线程问题或异步问题,这是一个非常简单的用例。我们调用了一个实例方法,并在其上方调用了另一个实例方法。我删除了被调用的方法,然后调用了上面的方法。然后我将我实际调用的方法移动到文件中的不同位置,看起来有多个属性被调用。
这令人不安和担忧,因为现在您觉得您不能相信您的代码会正常运行。
但我们确实“解决”了它。我们将该方法移至实际触发的代码处,经过一些试验和错误后,正确的方法被调用。尚不确定这是否会在其他方法中表现出来。
如果能够提供一个发生这种情况的简单项目就好了,但是这似乎不太可能,而且我无法与 Apple 分享我的代码库的快照。导致 Swift 运行时错误的一定是某种完美 Storm 。
关于ios - Swift 有时会调用错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36009725/