Может ли Objective C определить ссылку на объект вызова во время выполнения (отражение)?

Насколько я понимаю, Objective C является гораздо более динамичным языком, чем C # или Java. В C # вы можете знать только класс объекта-вызывающего (используя stacktrace), но не ссылку на экземпляр самого вызывающего.

Является ли Objective C более способным для этого?

Обновление: я посмотрел другой пост здесь. Как я могу определить «вызывающего» моего метода в Objective-C? , Насколько я понимаю, это дает только имя класса. Я настаиваю на том, что меня интересует не только имя класса, но и обращение к экземпляру вызывающего абонента.

  • Как вызвать метод класса с помощью функции performSelector () на AnyClass в Swift?
  • Как я могу найти тип свойства динамически в swift (Reflection / Mirror)?
  • Создание экземпляров классов, хранящихся в метатипах Словарь
  • iOS размытый текст: обнаружение и решение его раз и навсегда?
  • Список классов в проекте Objective-c
  • Swift: как получить тип элемента массива, имеющего доступный массив MirrorType
  • Как перечислить все классы, соответствующие протоколу в Swift?
  • 3 Solutions collect form web for “Может ли Objective C определить ссылку на объект вызова во время выполнения (отражение)?”

    На это уже был дан ответ:

    Как определить «вызывающего» моего метода в Objective-C?

    Ответ не особо хорош, хотя. Похоже, нет простого и надежного способа сделать это, кроме как охотиться через стек, который может быть версией ОС или зависимой от платформы.

    Почему именно вы хотели это сделать? Возможно, есть еще одно решение вашей проблемы.

    Насколько я знаю, вы не можете получить даже класс вызывающего. Все вызовы методов в Objective-C маршрутизируются через objc_msgSend() , который принимает в качестве параметров приемник, селектор и параметры метода.

    Приемник будет self и селектор _cmd . Вызывающий не участвует в вызове метода. Вы можете возвращать трассировку стека, чтобы знать, где был вызван метод.

    Я думаю, что это может быть началом: NSLog(@"%@", [NSThread callStackSymbols]); ,

    Хотя, я думаю, вам нужно сначала увидеть эту тему: как узнать, кто вызвал метод?

    Также NSThread Documentation 🙂

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.