개발/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 로 직접 메소드를 호출한다면

자유롭게 인자를 전달할 수 있다.

 

다음장에 다시 정리