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

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

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

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

3 Solutions collect form web for “Может ли Objective C определить ссылку на объект вызова во время выполнения (отражение)?”

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

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

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

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

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

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

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

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

Также NSThread Documentation 🙂

Interesting Posts

setFrame не работает должным образом для AVCaptureVideoPreviewLayer

Лучшие практики и предложения для опытных разработчиков iOS, начинающих разработку OS X?

Xcode 7 UI Test Order

Уведомление об отмене автоматического возобновления подписки: iOS PAYMENT

Обнаруживать, когда приложение iOS запускается в первый раз?

Условное значение для MessageComposeResult в MFMessageComposeViewController с быстрым

FIRMessagingDelegate вызывает ошибку сегментации: 11

автоматически созданный подкласс NSManagedObject для логического атрибута вызывает предупреждение

Не прямоугольная обрезка изображения iOS?

Аспектно-ориентированная библиотека Objective-C?

IOS HMAC-SHA1 отличается от стандартной Java HMAC-SHA1

Сохранить кодированный .mp3 в applicationStorageDirectory Adobe Air iOS

Как вызвать метод «tabBarController: didSelectViewController:« программно?

приложение get crashed при навигации по RootViewController из всплывающего окна сообщения

glDrawArrays выделяет память на каждом кадре

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