개발/Objective-C
SEl, @selector
강아지아빠
2010. 8. 29. 16:55
셀렉터는 메소드 이름의 문자열 주소이다.
주소가 같으면 동일 메소드이므로 이것을 고유식별자 라고 생각해도 된다.
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 로 직접 메소드를 호출한다면
자유롭게 인자를 전달할 수 있다.
다음장에 다시 정리