방법과 선택기의 차이점은 무엇입니까?
Objective-C에서 메소드, 선택기 및 메시지의 차이점은 무엇입니까?
이것은 좋은 질문입니다.
선택기 -선택기는 메소드 의 이름 입니다. 이러한 선택기에 매우 익숙 :
alloc
,init
,release
,dictionaryWithObjectsAndKeys:
,setObject:forKey:
, 등 콜론은 선택의 일부임을 참고; 이 방법에 매개 변수가 필요함을 식별하는 방법입니다. 또한 (극히 드물지만) 다음과 같은 선택기를 사용할 수 있습니다doFoo:::
.. 이것은 세 개의 매개 변수를 취하는 메소드이며[someObject doFoo:arg1 :arg2 :arg3]
. 선택기 구성 요소의 각 부분 앞에 문자가 있어야 할 필요는 없습니다. 내가 말했듯이 이것은 극히 드물며 Cocoa 프레임 워크에서 사용되지 않을 것입니다. Cocoa에서 직접 선택기로 작업 할 수 있습니다. 유형SEL
:SEL aSelector = @selector(doSomething:)
또는SEL aSelector = NSSelectorFromString(@"doSomething:");
메시지 -메시지는 선택자이며 함께 보내는 인수입니다. 내가 말하면
[dictionary setObject:obj forKey:key]
"메시지"는 선택자setObject:forKey:
에 인수obj
및key
.NSInvocation
나중에 호출 할 수 있도록 메시지를 개체에 캡슐화 할 수 있습니다 . 메시지는 수신자 에게 전송됩니다 . (즉, 메시지를 "수신"하는 객체).방법 -방법은 선택기와 구현 (및 동반 메타 데이터)의 조합입니다. "구현"은 실제 코드 블록입니다. 함수 포인터 (an
IMP
)입니다. 실제 메서드는Method
구조체 (런타임에서 검색 가능)를 사용하여 내부적으로 검색 할 수 있습니다 .
요청하지 않은 기타 관련 사항 :
메서드 시그니처 -메서드 시그니처는 메서드가 반환하고 수락하는 데이터 유형을 나타냅니다. 런타임에
NSMethodSignature
및 (일부 경우) raw 를 통해 표현할 수 있습니다char*
.구현 -메소드의 실제 실행 가능한 코드. 런타임시 유형은이며
IMP
실제로는 함수 포인터입니다. iOS 4.3에는 블록을IMP
. 이것은 정말 멋지다 .
알아두면 좋은 점 중 하나는 메서드 (선택자) 의 이름 이 메서드 (IMP) 의 구현 과 구별 된다는 것 입니다. 이것은 당신이 대담하다고 느끼면 서로 바꿀 수 있음을 의미합니다. 수행중인 모든 작업은 해시 테이블의 항목을 편집하는 것이므로 런타임에 메서드를 추가하고 제거 할 수도 있습니다. 키는 선택기이고 값은 IMP
메서드의 것입니다. 이것은 당신이 정말 미친 짓을 할 수있게 해준다. 희미한 마음이 아닙니다. :)
메소드는 객체 나 클래스가 어떤 작업을 수행하도록 요청 될 때 실행되는 구현입니다. 포함하는 클래스의 범위에 있으므로 다른 클래스를 통해 참조 할 때 다릅니다. 선택기는 메서드의 이름을 나타내는 식별자입니다. 특정 클래스 또는 메서드와 관련이 없으며 클래스 또는 인스턴스 메서드인지 여부에 관계없이 모든 클래스의 메서드를 설명하는 데 사용할 수 있습니다.
간단히 말해 선택기는 사전의 키와 같습니다. 누군가가 말하는 방법을 알려줄 수 있지만 사전 자체 (클래스 또는 객체)가있는 경우에만 가능합니다. 이 방법은 선택기를 키로 사용하여 사전에서 값을 요청할 때 얻는 것입니다.
이 사이트에는 문제의 모든 용어에 대한 개요가 있습니다. http://www.otierney.net/objective-c.html
링크를 확인하십시오. 그러나 간략한 요약을 제공하겠습니다.
메서드는 기본적으로 좋아하는 프로그래밍 언어에서 사용하는 함수 메서드와 같습니다.
메시지 (기사에서) "메시지는 다른 객체로 동적으로 전달 될 수 있습니다. Objective-C에서 객체에 대한 메시지를 호출하는 것은 객체가 해당 메시지를 구현한다는 의미가 아니라 어떻게 든 메시지에 응답하는 방법을 알고 있다는 의미입니다. 직접 구현하거나 방법을 아는 객체에 메시지를 전달합니다. "
선택자는 두 가지를 의미 할 수 있습니다. 메서드 이름을 참조하거나 "소스 코드가 컴파일 될 때 이름을 대체하는 고유 식별자를 참조합니다. 컴파일 된 선택기는 SEL 유형입니다." ( 출처 : http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocSelectors.html )
참고 URL : https://stackoverflow.com/questions/5608476/whats-the-difference-between-a-method-and-a-selector
'developer tip' 카테고리의 다른 글
Xcode 디버깅-이미지 표시 (0) | 2020.10.13 |
---|---|
iOS 7 이상 :보기 컨트롤러별로 상태 표시 줄 스타일 설정 (0) | 2020.10.13 |
추가 클래스 경로 옵션을 사용하여 "java -jar MyFile.jar"호출 (0) | 2020.10.12 |
pandas 데이터 프레임을 여러 열로 필터링하는 방법 (0) | 2020.10.12 |
Docker에 최소 플라스크 앱 배포-서버 연결 문제 (0) | 2020.10.12 |