2015-02-18 10 views
2

Я обнаружил, что SEL типа имеет следующую дефиницию:Что такое реализация objc_selector?

typedef struct objc_selector *SEL; 

Но я не могу найти, как objc_selector реализован.

Хорошо, если у нас есть следующий код

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) { 
    SEL mySelector = NSSelectorFromString(@"mySelector"); 
    return 0; 
} 

, то mySelector это просто указатель. После адреса, который он содержит, мы видим C-строку, которая может быть представлена ​​как:

const char* mySelector = "mySelector"; 

Но objc_selector не является C-строка, то есть структура, и она может содержать что-то другое. Поэтому я хочу знать, как реализована структура objc_selector.

+1

Это более подробный ответ ... http://stackoverflow.com/a/19322677/1016102 –

+0

@ DanielBocksteger вау благодарит вас так много! Я понятия не имею, почему я раньше этого не нашел. Отправьте эту ссылку, чтобы ответить, я хочу правильно выбрать ответ. Это действительно спасло мое время! –

+1

SEL - закрытая конструкция. Это содержание не должно вас беспокоить. –

ответ

3

Это может помочь вам:

Теперь это один весело и интересно. SEL является типом «Селектор», который идентифицирует имя метода (а не реализацию). Так, например, методы -[Foo count] и -[Bar count] имеют общий селектор, а именно селектор "count". SEL является указателем на структуру objc_selector, но что это за черт objc_selector? Ну, это определяется по-разному в зависимости от того, используете ли вы время выполнения GNU Objective-C или NeXT Objective-C Runtime (например, Mac OS X). Ну, это заканчивается тем, что Mac OS X сопоставляет SELs с простым C strings. Например, если мы определим класс Foo с - (int)blah method, код будет NSLog(@"SEL = %s", @selector(blah)); выход SEL = blah.

Взятые из: here

+0

Также вы не должны предполагать, что реализация остается прежней. Только потому, что это строка C прямо сейчас, это не значит, что она одна в будущем. – Alf

+0

Вы не должны предполагать, что реализация одинакова на 32 и 64-разрядных MacOS X, на разных версиях MacOS X и на 32 и 64-битных iOS, включая снова разные версии iOS. Просто потому, что это строка C прямо сейчас в одной из нескольких реализаций Objective-C, не означает, что она одинакова для всех. – gnasher729

Смежные вопросы