Я пытаюсь понять, как правильно swizzle использовать method_setImplementation()
. До сих пор в Интернете я видел два преимущественно популярных способа метода swizzle, один раз использовал method_setImplementation()
, а остальные levarages method_exchangeImplementation
.Как правильно swizzle с method_setImplementation()?
При использовании swizling с использованием method_exchangeImplementation()
вы можете попасть в проблему, когда целевой класс не реализует метод, который вы пытаетесь выполнить. Чтобы избежать проблем с классом-предшественником, реализующим этот метод, и некорректно swizzling, сначала добавьте реализацию в свой целевой класс, а затем замените swizzledMethod IMP
на свой метод классов-предков, чтобы привести в порядок. Это все имеет смысл для меня ...
Мой вопрос: как мы справляемся с тем же вышеприведенным случаем, когда swizzling с method_setImplementation
? Разве мы не должны справляться с этим делом (интуитивно я чувствую себя так, как мы)? Если нам нужно обработать приведенный выше пример кода примера, это мне очень поможет, потому что я потерял его, как с этим справиться.
Спасибо за комментарий. Я считаю, что я понимаю логистику того, как подшучивать со свободными функциями, частью, о которой я особенно спрашиваю, является то, как обрабатывать случаи родословной, когда целевой класс не реализует эту функцию, а суперкласс. При swizzling через method_exchangeImplementation существует определенный способ справиться с этим, и я спрашиваю, есть ли какой-то аналогный способ справиться с этим при переходе через method_setImplementation. Я сломаю его в своем вопросе, если вы дадите ему прочитать. Если его неясно, пожалуйста, дайте мне знать, я могу попробовать подробнее ... – AyBayBay
@AyBayBay Я обновил ответ, дайте мне знать, если последняя часть уточнит ваш вопрос. – Cristik
спасибо! Я на самом деле не решил его предложить, но я считаю, что ваше предложение тоже должно работать! – AyBayBay