셀렉터는 메소드 이름의 문자열 주소이다.
주소가 같으면 동일 메소드이므로 이것을 고유식별자 라고 생각해도 된다.
Objective-C 에서는 이것을 SEL 이라는 자료형으로 표현한다.
그리고 이것을 얻는 키워드가 @selector 이다.
SEL sel1 = @selector(display); // display 메소드 고유 식별자 or 함수 이름 주소
SEL sel2 = sel_getUid("disPlay"); // display 메소드 고유 식별자 or 함수 이름 주소
두 번째 형식의 경우 함수 문자열로 셀렉터를 얻을 수 있기 때문에
파일에 메소드 이름을 기록해 두면 이것을 이용해 나중에 메소드를 호출할 때 유용하다.
이렇게 얻는 SEL 역시 혼자서는 아무 의미가 없다.
이것은 메소드를 간접 호출할 때 다시 사용된다.
SEL sel2 = sle_getUid("display");
[pbase performSelector:sel2]; //display call
performSelector 는 셀렉터를 이용해 메소드를 간접 호출한다.
문자열 이름으로 메소드를 호출할 때 사용할 수 있지만, 메소드 인자를 전달하는데는 한계가 있다.
그래서 셀렉터를 이용해 IMP 를 얻은 다음에 IMP 로 직접 메소드를 호출한다면
자유롭게 인자를 전달할 수 있다.
다음장에 다시 정리
'개발 > Objective-C' 카테고리의 다른 글
[Objective-C] tokenizerWithString in ParseKit (0) | 2010.08.29 |
---|---|
[Objectiv-C] UILabel과 관련된 주요 설정값 (0) | 2010.08.29 |
[Objectiv-C] Collection에 대해서 (0) | 2010.08.29 |
[Objective-C] Memory 관리 (0) | 2010.08.29 |
클래스, 셀렉터, 프로토콜 대충 요약 (0) | 2010.08.29 |