Я преподаю себе Objective-C как чувство вины, если вы это сделаете. У меня есть самопровозглашенное сильное понимание языка Java, так что это не ужасно трудный переход - это конечно же весело. Но, увы, мой вопрос!Objective-C Поздняя статическая привязка
Я пытаюсь воспроизвести что-то, что существует в PHP: Поздняя статическая привязка. В PHP я могу украсить вызов метода «static ::», который будет динамически связывать этот метод с вызывающим пользователем во время выполнения. С другой стороны, если используется ключевое слово «self ::», связывание является статическим и связано с классом, в котором он находится, независимо от того, какой дочерний класс вызывает его.
В Obj-C мне трудно воспроизвести эту парадигму. Я спросил своего повелителя, Google, как поздно статически привязать к какао, но я не думаю, что это возможно. Его можно назвать чем-то другим, или это может потребовать очень сложного решения. Вот что я делаю сейчас:
Родитель Метод Класс:
класс-(id) whoAmI {
return ([self class]);
}
Ребенок, ChildClass, расширяет ParentClass и не переопределить метод экземпляра WHOAMI.
NSLog(@"Calling from PARENT: %@", [parent whoAmI]);
NSLog(@"Calling from CHILD: %@", [child whoAmI]);
Когда я отправить сообщение каждому из объектов класса, динамическое связывание делает то, что он должен делать, и я получаю следующее из NSLog():
2010-09-21 11: 39: 07,484 WhoAmI [4803: a0f] Вызов из РОДИТЕЛЕЙ: родитель
2010-09-21 11: 39: 07,486 WhoAmI [4803: a0f] Вызов из ДЕТЕЙ: Детский
в конце концов, я хочу узнать - если возможно - как заставить Cocoa прекратить динамическое связывание, чтобы метод whoAmI всегда возвращал объект i n, в котором он находится (всегда родительский). Я также хочу, чтобы это был метод экземпляра. Как мне это сделать?
-Sean
Я не уверен, что это даст вам то, что вы ищете, но изменение метода 'whoAmI' для возврата [Parent class];' приведет к возврату объекта, в котором находится этот метод. – kubi
Это именно то, что я ищу! Я не знал ключевое слово Parent. Спасибо тебе, куби. Не могли бы вы разместить это как ответ, чтобы я мог пометить его как принятый ответ? – Sean
Шон, я думаю, вы неправильно поняли комментарий куби. Нет ключевого слова Parent, я думаю, что он имел в виду ваш класс «ParentClass». Более общий способ добиться того, что говорит куби, - использовать [класс суперкласса]. – Echelon