2012-07-15 4 views
0

가능한 중복은 :
Are selectors in Objective-C just another way to send a message to an object?선택기의 필요성은 무엇입니까?

나는 선택기에 대한 애플의 설명서를 읽었습니다,하지만 그들에 대한 필요가 왜 난 아직도 이해가 안 돼요.

내가 이해할 수있는 한, 선택기는 함수 포인터와 같습니다. 그게 맞습니까?

+1

가능한 복제본 [객관적인 선택자입니까? 객체에 메시지를 보내는 또 다른 방법입니까?] (http://stackoverflow.com/questions/3543137/are-selectors-in-objective-c-just- 오브젝트와 메시지를주고받는 또 다른 방법)과 [ObjC의 선택자 이해하기] (http://stackoverflow.com/questions/11051528/issue-understanding-a-part-of-selectors- of-objective-c) –

답변

1

선택기는 함수 포인터가 아닙니다.

선택자는 고유 주소 메서드 식별자 (메시지 이름)입니다. 메신저 함수 (objc_msgSend _ *())가 빠를 필요가 있습니다. 메소드 이름을 검색 할 때 메신저는 매번 값 비싼 문자열 비교를 할 필요가 없습니다. 왜냐하면 선택기가 메모리에 고유 한 주소를 가지고 있기 때문입니다 , 간단한 포인터 비교로 충분하다.

3

선택기는 개체의 메서드 구현을 가져 오는 데 사용됩니다.

예를 들어, 거의 모든 객체가 수퍼 클래스에서 구현을 상속하더라도 description 메서드를 구현합니다. 함수 포인터는 description의 특정 구현 (예 : NSString의 버전 또는 NSNumber 버전 만 가리킬 수 있지만 둘 다 가리킬 수는 없습니다)을 가리킬 수 있습니다. 한 클래스의 description 구현의 함수 포인터를 가져 와서 모든 클래스에 사용할 수는 없지만 수는은 동일한 description 선택기를 사용하며 대상으로 사용하는 개체가 무엇이든간에 올바른 메서드 구현은 항상 사용하십시오.

관련 문제