如果您愿意的话,我正在教自己客观-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
}

碰巧的是,我希望创建的内容必须通过将我的类消息固定地绑定到父级本身:父母。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top