Как узнать, кто отправил сообщение - PullRequest
4 голосов
/ 06 декабря 2010

Это первое, что я публикую в stackoverflow, хотя я всегда проверяю форум.

Я ищу удобный способ узнать, кто отправил сообщение в ObjC без отправки указателя в качестве аргумента в методе.

Может кто-нибудь помочь?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Это невозможно в общем случае (сообщения могут быть установлены из мест, где нет себя, таких как среда выполнения или основная функция), и это нецелесообразно даже там, где это технически возможно, потому что это потребует от вас пройтись по стеку и проанализировать байты там.

На практике вам не нужно знать отправителя в большинстве случаев, кроме методов действий. Обычно это признак плохого дизайна. И в любом случае, когда вам нужно получить ссылку на другой объект, она должна быть передана в качестве аргумента методу.

РЕДАКТИРОВАТЬ: Я просто наткнулся на это и заметил комментарий. В случае, если кому-то интересно, причина, по которой это часто является признаком плохого дизайна, заключается в том, что он создает тесную связь между компонентами, что почти никогда не требуется (опять же, за пределами методов действия). Обычно для выполнения той же цели вы можете взять делегат или блок обратного вызова.

3 голосов
/ 06 декабря 2010

Нет, это невозможно без передачи указателя на отправителя сообщения, например:

- (void) someMethod:(id) sender {
}

[obj someMethod:self];
0 голосов
/ 06 декабря 2010

Полагаю, вы могли бы использовать значение hash базового NSObject (если объект является подклассом NSObject). Как и NSUInteger, он будет того же размера, что и указатель, поэтому экономия места там невелика.

Почему именно вы не хотите использовать указатель?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...