Я заметил странное поведение во время работы с проектами Swift. Я не могу это объяснить, кроме того, что Swift иногда вызывает неправильный метод. Это очень редко, и даже добавление пустых строк в код может привести к тому, что эта ошибка исчезла.
Позвольте мне объяснить на скриншотах, что я имею в виду, затем я использую пример проекта CoreData проекта SwiftDDP, который можно найти в Github, но такие проблемы я смог увидеть в своих собственных проектах.
Здесь мы в Todos.swift:74
, где вы можете увидеть точку останова, я ожидаю, что следующий вызов должен быть getId()
методом класса MeteorClient
, потому что он уже был создан:
После того, как вы видите, как выглядит ping()
того же экземпляра:
Следующие два шага приводят к исключению EXC_BAD_ACCESS
:
В моем проекте я часто видел эту проблему, прежде чем перестать использовать синглтоны, поэтому это может быть связано с использованием статической памяти Swift, или я не понимаю чего-то, что неудивительно, поскольку у меня мало опыта в многопоточности и управлении памятью.
Моя среда:
- AppCode 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 и наоборот.
Было бы благодарно, если кто-нибудь сможет объяснить мне это странное поведение.
Спасибо!