2012-06-09 3 views
3

포인터를 사용하지 않고 어쩌면 입력 목표 C를 표현하는 가장 좋은 방법은 무엇입니까 (포인터에 대한 포인터가 객체가 아닌?), 포인터를 사용하지 않고 어쩌면 목표 C를 입력 대표하는? 개체에 대한 포인터를 가리키는 포인터가 개체가 아니기 때문에 단순히 개체에 대한 포인터를 사용할 수는 없으며 개체가되어야합니다.가장 좋은 방법은

나는 MaybeEmployee, MaybeOrderStatus, 그리고 더 많은 커스텀 클래스와 같은 클래스를 만들 수있는 각 객체에 대한 커스텀 클래스를 가지는 것이 하나의 방법이라는 것을 알고있다. 이것은 효과가있을 것이지만, 그것은 아주 좋은 해결책 인 것 같지 않습니다.

그것을 할 수있는 두 번째 방법

갖는 단순히 어쩌면 클래스는 잘못된 것 같다. 타입 안전성의 결여는 평범하지 않습니다.

+0

인터페이스를 생성하고'respondsToSelector' 호출이 충분하지 않습니다? –

+0

개체를 사용하고 클래스를 직접 가져올 수 있습니다. 참조 : http://stackoverflow.com/questions/2055940/how-to-get-class-name-of-object-in-objective-c – hotpaw2

+0

@MarekSebera 그 말이 무슨 뜻인지 이해할 수 없지만, 더 자세히 들어가시겠습니까? –

답변

0

나는이 "어쩌면 입력"당신에게 의미하지만, id는 자족되지 않는 이유가 무엇인지 정확히 모르겠어요?

+1

어쩌면 유형은 매개 변수가있는 다형성 유형으로, 어떤 유형의 경우 a는 무효 값 (null 값이 아님)이거나 하나의 값입니다. 아무것도 null가 아닌 주된 이유는 setToNothing 메소드를 만들 수 있다는 것입니다. setToNull 메소드는 의미가 없습니다. –

1

lef2는 올바른 아이디어를 가지고 있습니다. NSNull을 사용하여 "어쩌면"이 아닌 경우를 나타낼 수 있습니다.

그것은 당신의 방법은 ID 타입의 객체를 반환하는 것입니다,하지만 당신이 말한대로, 희생의 안전을 입력 것을 처리하는 간단한 방법. 내가 조상 클래스 MaybeClass을 만들어 제안하고 모든 클래스를 만들 것

그에서 파생. 그런 다음 특정 서브 클래스를 만들 수 있습니다. 실제로는 NSNull입니다. 당신은 또한 단지 표준 객체를 사용하여 메소드 호출의 결과가 비어있을 때 전무를 반환 할 수 있습니다

참고. Objective C는 많은 다른 언어보다 훨씬 더 깨끗하게 객체 포인터를 처리합니다. nil 객체에 메시지를 보내는 것은 완벽하게 유효합니다. 그들은 그냥 떨어졌다.

+0

'nil'을 사용하는 것은 유용한 대용 물이 아니지만'MaybeClass'는 유망한 것으로 들립니다. – Gabe

0

나는 또한 "어쩌면 유형"이 무슨 뜻인지 확신 할 수 없습니다! 프로토콜을 구현하는 일부 클래스와 그렇지 않은 프로토콜로 원하는 프로토콜을 사용할 수 있습니까? 그것들은 당신이 객체를 구현하는지 아닌지를 확인할 수 있습니다. [yourObject는 conformsToProtocol : @protocol (yourProtocol)]을 준수합니다. 나는 이것이 도움이되기를 바랍니다. 그러나 그렇지 않다면 더 좋은 설명이 될 것입니다.