Objective-C晚静态结合
-
04-10-2019 - |
题
如果您愿意的话,我正在教自己客观-C是一种有罪的乐趣。我对Java语言有一个自称的强烈掌握,所以这不是 非常困难 过渡 - 肯定很有趣。但是,las,我的问题!
我正在尝试重现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]来自孩子的电话:孩子
最终,我想学习(如果可能的话)如何让可可停止动态绑定,以便whoami方法始终返回其居住的对象(始终是父母)。我也希望它是实例方法。我该怎么做?
- 西恩
解决方案
实际上,Objective C具有强大的内省功能,几乎可以肯定可以通过参考Apple的广泛作用来做您想做的事 目标C运行时文档. 。这是用于访问目标C对象和类层次结构的内部工作的完整C API。
如果没有别的,通过尝试这些内容,您将了解很多关于语言的工作方式,并且应该帮助您调试困难问题。
其他提示
更改合并父类名称(或超类)名称的方法:
-(id) whoAmI {
return ([Parent class]); //In this instance, Parent is the superclass
}
碰巧的是,我希望创建的内容必须通过将我的类消息固定地绑定到父级本身:父母。