После большого количества анализа, такого как отладка журнала и инструкций, я уверен, что это ошибка оптимизации быстрого компилятора xcode 11.4. Подробно, оптимизация вызывает грязный указатель стека (fp) в точке открытия нового фрейма стека функций. Я покажу это в следующем.
Вот вспомогательная функция type metadata accessor for myapp.MainViewController at <compiler-generated>
, сгенерированная компилятором в нашем mainviewcontroller.
<+ 0>, <+4 > это неправильно. Это должно быть
0x6cd85c <+0>: push.w {r4, r5, r6, r7, lr}
0x6cd860 <+4>: add r7, sp, #0xc
r7 - fp. поэтому инструкция по ошибкам <+0> не сохраняет r7, а вложенные элементы <+4> делают r7 ниже, чем sp, что приводит к беспорядку во всем стеке. Так что это явно не так.
Вот что происходит, когда исполняются модули.
До:
После:
Весь стек теряется из-за ошибки fp.
И мы также можем это проверить в xcode 11.3. <+0> <+2> соответствует нашим ожиданиям.
Таким образом, мы должны также перейти на xcode 11.3 и использовать исправление времени выполнения для адаптации нового iOS Функция SDK, которая должна быть вызвана в xcode 11.4.