Мне было интересно пару дней, если NSInvocation
понадобится NSMethodSignature
. Допустим, мы хотим, чтобы написать свой собственный NSInvocation, мои требования будут таким образом:NSInvocation, требующий NSMethodSignature
- мне нужен селектор
SEL
- целевой объект для вызова селектора на
- массиве аргументов
Затем я достал IMP
из цели и SEL
и передал argument
в качестве параметров.
Итак, мой вопрос: зачем нам нужен NSMethodSignature
для создания и использования NSInvocation
?
Примечание: Я знаю, что, имея только SEL
и цель, у нас нет аргументов и возвращаемого типа для этого метода, но почему мы заботимся о типах аргументов и возвратах?
Итак, вы говорите, что внутри NSInvocation не использует objc_msgSend, он напрямую использует вызовы fptr и копирует args в регистры и т. Д. –
Но почему мы передаем ему 'SEL', цель и' NSMethodSignature ', когда мы знаем, что мы могли бы получить подпись, просто выполнив' [target methodSignatureForSelector: SEL] ', мы могли бы просто передать SEL и target и все равно получить метод sig во время выполнения. что мне здесь не хватает? –
@OmarAbdelhafith: Нет, он использует 'objc_msgSend()'.Но для правильного использования 'objc_msgSend()', вы также должны знать подпись - вы должны притворяться, что 'objc_msgSend' имеет тип указателя функции вызываемой функции. Потому что 'objc_msgSend()' просто батут, который заменяет собой вызванную функцию, оставляя все аргументы в регистрах и стеке неповрежденными. – newacct