Концептуально эта информация доступна в стеке, хотя добраться до нее непросто. Большинство решений предполагали создание исключения для захвата трассировки стека, а затем чтение трассировки. Я не пробовал, но это может работать:
void myFunc()
{
NSArray *stack = [NSThread callStackSymbols];
// I have no idea if the current function call is at the 0 or last position
// of the array. Experiment here!
}
Соответствующая документация: NSThread Class Reference
Обратите внимание, что если вы хотите, чтобы функция вести себя по-разному в зависимости от того, кто звонит, НЕ ДЕЛАЙТЕ ЭТОГО. Это хрупкий (нет никаких гарантий относительно того, изменится ли формат того, что возвращает callStackSymbols
).
Лучше просто передать параметр в вашу функцию. Если вы имеете дело с API обратного вызова C-функции, обычно существует параметр «context» или «info» void *
, который вы можете использовать для передачи произвольного указателя. Это может быть указатель на ваш объект.
Возможный дубликат [Objective C find caller of method] (http://stackoverflow.com/questions/1451342/objective-c-find-caller-of-method) –