저는 Mick West가 제공 한 'Evolve Your Hierarchy' 행을 따라 Objective-C를 사용하여 간단한 구성 요소 기반 게임 개체 아키텍처를 구현하려고했습니다. 이를 위해 메서드를 사용하여 Mike Ash가 작성한 'Objective-C Message Forwarding' 문서에 설명 된대로 몇 가지 아이디어를 성공적으로 사용했습니다.Obj-C 구성 요소 기반 게임 아키텍처 및 메시지 전달
기본 설정에는 인스턴스 변수로 구성 요소 클래스의 세 인스턴스 인 GCPositioning, GCRigidBody 및 GCRendering이 포함 된 컨테이너 GameObject 클래스가 있습니다. -(id)forwardingTargetForSelector:
메서드는 -(BOOL)respondsToSelector:
메서드를 사용하여 결정된 해당 선택기에 응답하는 구성 요소를 반환합니다.
모든 점에서 매력적으로 작용합니다. 구현 된 구성 요소 중 하나에서 구현 된 GameObject 인스턴스에 대한 메서드를 호출하면 작동합니다. 물론 문제는 컴파일러가 각 호출에 대해 '...에 응답하지 않을 수 있습니다.'라는 경고를 제공한다는 것입니다. 이제, 제 질문은 어떻게 이것을 피합니까? 그리고 특히 GameObject의 각 인스턴스마다 다른 구성 요소 집합이 있다는 사실에 관해서는? 어쩌면 개체 당 개체에 대한 컨테이너 개체를 사용하여 메서드를 등록하는 방법? 예를 들어, 어떤 종류의 -(void)registerMethodWithGameObject:
메서드를 만들 수 있습니까? 어떻게 그럴까요?
이제 코코아와 Objective-C를 처음 접했을 때가 멀었을 수도 있고 그렇지 않을 수도 있습니다. 근본적으로 말이죠.이 모든 것이 아주 외계인 일 수 있습니다. 당연히, 나의 특정한 문제점에 해결책을 아주 많이 알고 싶을 것이나, 이것을하기의 우아한 방법을 설명하는 것을 걱정할 누군가는 추가로 아주 환영받을 것입니다.
많은 감사, -Bastiaan
불행히도 기술적으로 정확한 경고가 남을 것입니다. 컴파일러는 일치하는 메서드가 인터페이스에 선언되어 있지 않으면 개체가 실제로 응답하는지 여부를 확인할 수 없습니다. 즉, GameObject를'id'로 캐스팅하여 (못생긴) 또는 경고를 구성 옵션 (못생긴)으로 사용하지 못하게 할 수 있습니다. :/ –
내 비슷한 질문에 대한 bbum의 대답을 참조하십시오. http://stackoverflow.com/questions/2259012/avoiding-compiler-warnings-when-doing-message-forwarding. 기본적으로 클래스에 범주를 선언하고 해당 범주에 전달 된 메서드를 넣습니다. – Felixyz