Я учу себя Objective-C как досадное удовольствие, если хотите. Я самопровозглашен и хорошо разбираюсь в языке Java, так что это не ужасно трудный переход, хотя и увлекательный. Но увы, у меня вопрос!
Я пытаюсь воспроизвести то, что существует в PHP: Late Static Binding. В 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 всегда возвращал объект, в котором он находится (всегда Parent). Я также хочу, чтобы это был метод экземпляра. Как бы я это сделал?
-Шон
whoAmI
наreturn [Parent class];
всегда приведет к возврату объекта, в котором находится этот метод. - person kubi   schedule 21.09.2010