如果你愿意的话,我正在自学Objective-C作为一种罪恶的乐趣。我自称对 Java 语言有很强的掌握,所以这不是一个非常困难的过渡——虽然它确实很有趣。但是,唉,我的问题!
我正在尝试重现 PHP 中存在的东西:Late Static Binding。在 PHP 中,我可以使用“static::”来装饰方法调用,它会在运行时将该方法动态绑定到调用者。另一方面,如果使用关键字“self::”,则绑定是静态的,并且与它所在的类相关联,而不管哪个子类调用它。
在 Obj-C 中,我很难重现这种范式。我已经问过我的霸主谷歌,如何在 Cocoa 中进行后期静态绑定,但我认为这是不可能的。它可能被称为别的东西,或者它可能需要一个非常复杂的解决方法。这就是我现在正在做的事情:
父类方法:
-(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 方法总是返回它所在的对象(总是父对象)。我也希望它是一个实例方法。我该怎么做呢?
-肖恩