ios - Swift 有时会调用错误的方法

标签 ios swift

我在处理 Swift 项目时注意到奇怪的行为。除了 Swift 有时会调用错误的方法外,我无法解释。这种情况非常罕见,即使在代码中添加空行也可能导致此错误消失。

让我在截图中解释一下我的意思,接下来我使用可以在 Github 上找到的 SwiftDDP 项目的 CoreData 示例,但是我在自己的项目中能够看到这样的问题。

我们在 Todos.swift:74 可以看到断点,我希望下一次调用应该是 MeteorClientgetId() 方法> 类,因为它已经被实例化了:

Screenshot 1

在 Step Into 之后,您可以看到同一实例的 ping() 被调用:

Screenshot 2

接下来的两步导致 EXC_BAD_ACCESS 异常:

Screenshot 3

在我的项目中,在我停止使用单例之前,我经常看到这个问题,所以它可能与 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/

相关文章:

ios - 如何计算 UIScrollView 结束拖动所需的时间?

swift - 在 Swift/iOS 中的应用程序之间共享文件数据

ios - 为什么我不能捕获这个 Swift 异常?

快速反射导致任何不可能的零值

ios - 以编程方式滚动 UIScrollView 然后用手动滚动覆盖

ios - Swift IOS 中的辅助功能画外音单次滑动手势

ios - 如何在 RootView ChildViewControllers 中隐藏 TabBar

java - Android 地理编码功能不如 iOS

ios - 在具有附加功能的同一应用程序中使用 ViewController 的副本

ios - 在 XCtest 类中使用 override init()?