objc-runtime search_method_list зависает навсегда, тупик?

#ios #objective-c #cocoa #objective-c-runtime

#iOS #objective-c #какао #objective-c-runtime

Вопрос:

Разработчики macOS / iOS, примерно с двух месяцев назад мое приложение иногда зависает навсегда. Затем я пробую программу, в которой я нашел почти все потоки, за исключением того, что основной поток ожидает блокировки. и основной поток выполняется в коде objc-runtime, как показано на рисунке ниже. и приложение не выйдет из строя, методы не вернутся 🙁

Основной поток

другой поток, выполняющий objc-код, ожидает блокировки

затем я просматриваю исходный код 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, и одной из блокировок во время выполнения.