我有以下继承树:
NSObject <- GameObject <- RenderableObject <- SimpleBullet
GameObject
有一个名为bounds
的方法,它返回对象的边界。在我的代码中,我有SimpleBullet
调用bounds
来获取其边界,我收到一条警告,说bounds
在几个地方被定义;奇。如果我将SimpleBullet
转换为GameObject
并调用bounds
方法,则一切都按预期工作。发生了什么?我无法弄清楚这种行为。例如:
SimpleBullet* bullet = bulletInstance;
[bullet bounds]; // we get the warning.
[(GameObject*)bullet bounds]; // works as expected.
正如我所说,bounds
方法是在GameObject
中定义的,但为什么Obj-C不知道SimpleBullet
是GameObject
并且不允许我打电话它的方法没有警告?
答案 0 :(得分:3)
经过一番调查后,我设法知道发生了什么。编译器正在玩弄我,因为没有报告一个有意义的错误。问题是我没有导入/包含SimpleBullet.h。宣布了前瞻性声明,但不是真正的实施。
这使我认为默认编译器将其视为id对象,并尝试在所有适合调用签名的已注册类中查找方法。只是一个猜测,不确定这个:)。
感谢您的帮助。
答案 1 :(得分:1)
UIView
也有-bounds
方法。确保您的方法具有相同的返回类型。