를 슈퍼 클래스 캐스트없이 경고가 발생 나는 다음과 같은 상속 트리가 :상속 된 메서드를 호출하면
NSObject <- GameObject <- RenderableObject <- SimpleBullet
GameObject
이 객체의 경계를 돌려줍니다 bounds
라는 메소드를 가지고 있습니다. 내 코드에서 해당 bounds
을 호출하는 SimpleBullet
이 있고 여러 위치에 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
및 아님을 인식하지 못합니다?
컴파일러는'bullet'이'id' 변수가 아닌'SimpleBullet' 객체라는 것을 알고 있습니까? 'id' 변수에 대해 메소드를 호출하면 컴파일러가 혼동을 일으킬 수 있습니다. – zneak
코드를 조금 더 보여줄 수 있습니까? ** 정확한 ** 오류 메시지 란 무엇이며 정확히 어디에서 발생합니까? 더 많은 코드를 표시하십시오. ObjC에서 메시지 전송은 클래스 계층 구조에 바인딩되지 않으므로 해당 선택기에도 응답하는 다른 클래스가있는 경우 경고를받는 이유 일 수 있습니다. –
온 전성 검사로서, 나는 당신의 설명을 정확하게 따르는 간단한 시험을 만들었고 정상적으로 작동합니다. 최소한의 테스트 케이스를 제공 할 수 있습니까? (실제 코드를 실행하고 의사 코드가 아닌 오류를 보았을 때) 실제로 문제가 발생합니까? – Chuck