#ios #objective-c #cocoa #objective-c-runtime
#iOS #objective-c #какао #objective-c-runtime
Вопрос:
Разработчики macOS / iOS, примерно с двух месяцев назад мое приложение иногда зависает навсегда. Затем я пробую программу, в которой я нашел почти все потоки, за исключением того, что основной поток ожидает блокировки. и основной поток выполняется в коде objc-runtime, как показано на рисунке ниже. и приложение не выйдет из строя, методы не вернутся 🙁
затем я просматриваю исходный код objc-runtimeobjc-runtime и компилирую версию отладки, ссылку на мой program.it повторно создайте проблему. в функции IMP lookUpImpOrForward(Class cls, SEL sel, id inst,
основной поток удерживал блокировку времени выполнения, а другие потоки ожидают. но я не знаю, что может вызвать проблему, какова основная причина? есть предположения? спасибо вам всем!
bool initialize, bool cache, bool resolver)
Комментарии:
1. Есть ли в вашем приложении какой-либо метод swizzling или другое редактирование во время выполнения?
2. @bbum нет, но мы обнаружили, что в некоторых потоках / очередях есть qos, взаимодействующие с пользователем, может быть, в этом причина?
3. Я бы настоятельно рекомендовал подать радар с простым, воспроизводимым примером для Apple, у них будет гораздо больше контекста, чем у любого из нас здесь, в stack overflow. Если бы мне пришлось догадываться, это какое-то действительно странное взаимодействие между заменой класса, выполняемой KVC, и одной из блокировок во время выполнения.