Отличаются в смысле самих числовых значений селекторов.
Вообще конечно это зависит от компилятора. Я смотрю на виртуалке Snow Leopard, там так. Попробовал сейчас на ideone.com — там иначе.
Идея следующая. Создаем objc-класс с парой методов.
int main()
{
c1 *obj1 = [[c1 alloc] init];
SEL s1 = @selector(meth1);
SEL s2 = @selector(meth2);
SEL s3 = @selector(methUnexist1);
SEL s4 = NSSelectorFromString(@"meth1");
SEL s5 = NSSelectorFromString(@"meth2");
SEL s6 = NSSelectorFromString(@"methUnexist2");
SEL s6 = NSSelectorFromString(init);
print_sel(s1);
print_sel(s2);
print_sel(s3);
print_sel(s4);
print_sel(s5);
print_sel(s6);
print_sel(s7);
return 0;
}
В результате имеем: s1 и s2 — селекторы существующих пользовательских методов; s3 — селектор несуществующего метода, но оформленный конструкцией языка selector; s4 и s5 — селекторы существующих пользовательских методов через функцию получения по строке (в рантайме); s6 — селектор несуществующего метода по строке в рантайме; s7 — селектор системного метода.
Вывод (Snow Leopard):
SEL 00000DEB = meth1
SEL 00000DF1 = meth2
SEL 00000E20 = methUnexist1
SEL 00000DEB = meth1
SEL 00000DF1 = meth2
SEL 0010FF60 = methUnexist2
SEL 816CD218 = init
Видим, что селекторы существующих методов (добавленные на этапе компиляции) совпадают для разных способов получения селектора (оператором @ selector или рантаймовой фукнкцией).
Селектор несуществующего нигде метода methUnexist1 располагается «рядом» с селекторами существующих методов. Возможно, из этого можно сделать вывод, что он также был добавлен в таблицу на этапе компиляции (т.к. @ selector — конструкция времени компиляции)?
Селектор несуществующего метода methUnexist2 уже отличается от остальных… такое впечатление, что он как раз был создан динамически и добавлен в таблицу уже в рантайме.
И наконец, селектор системного метода init вообще очень сильно отличается по значению. Интерпретировать это я уже не могу:)
Отличная статья, надеюсь на продолжение! Язык действительно классный, несмотря на необычный синтаксис. Классный именно своими динамическими возможностями.
Я как-то смотрел исходники рантайма и проводил небольшие эксперименты, с похожей целью — выяснить как же работает этот механизм отправки сообщений. Селекторы, сформированные на этапе компиляции, имеют значения, сильно отличающиеся от селекторов этапа выполнения (видимо, это связано с тем, что существует две таблицы — статическая в секции константных данных и динамическая в куче).
Очень интересно, как селектор связывается с методом, сравнительный анализ этого с таблицами виртуальных функций (и можно ли эти два механизма объединить), реализация возможностей динамического добавления (и удаления?) методов из классов и т.д.
Полез искать что за «интернет»:) это мейлру чтоли? Прикольное название, заценил. И самое главное — удалять страшно! Вопрос винды будет «Вы действительно хотите удалить Интернет с вашего компьютера?».
Нужно еще сделать вьюер с названием «Все ваши фотографии», видеоплеер «Все фильмы» и редактор «Все документы».
В моих фантазиях я, конечно, думаю: еще было бы хорошо, чтобы человек в любой момент мог легко изменить поисковую систему по умолчанию.
Это правда, очень хорошо когда такая возможность есть. Чтобы изменить поисковик на стартовой странице Оперы на Гугл, пришлось залезть куда-то во внутренности браузера и поменять в конфигах нескольких местах «RU» на «US». Но удалось таки! А вот удастся ли это людям, далеким от IT?
Вот интересная ссылка — программа, имитирующая хакерский интерфейс из голливудских фильмов
Правда, там ИМХО реализовали далеко не все возможности (на опеннете как раз и обсуждали что еще там не хватает:) )
Интересно, есть еще подобные проекты?
А уж если объединить такую софтину с эмулятором старого терминала, который уже обсуждался здесь…
Жду когда такие программы появятся в свободном доступе. Можно будет анализировать речи политиков:)
Да и в быту полезно, на смартфон поставил — и анализатор определяет степень правдивости собеседника.
поправка — да, есть — но работает для всего текста, а не для выделенного фрагмента. И «убрать форматирование» работает как-то странно — шрифт оказывается не тот, который в заметке по умолчанию
Сделайте пожалуйста кнопочку на панели форматирования, чтобы форматировала выделенный текст моноширинным шрифтом (и, может быть, в какой-то рамочке или на каком-то слегка другом фоне… хотя и не обязательно).
Удобно было бы для оформления кусков кода, а то выискивать моноширинный шрифт в огромном списке системных шрифтов неудобно и долго.
Странные они, японцы… Зачем делать роботов, копирующих человека? Если честно, такое немного пугает.
Роботы это хорошо, но сделайте обычные терминалы по типу банкомата. Самое то для регистрации в гостинице: и документы отсканировать (или как там у них регистрируются), и деньги принять (купюроприемник + считыватель банковских карт), и на сенсорном экране выбрать свободный номер, и выдать карточку-электронный ключ.
Если они все будут соответствовать единому стандарту — то ничего.
А то вот с NFC сейчас получилось так, что мой Galaxy s4 не читает некоторые карточки. Причем даже не потому что технически не может, а потому, что там какие-то патентные проблемы с некоторыми форматами.
А если человек уволится и устроится в другую компанию? Старый чип вытаскивать что-ли и новый вставлять? А накапливать чипы в теле не хотелось бы, да и они будут создавать помехи друг другу при считывании. Поэтому если уж чипировать, то конечно при рождении, и использовать при этом единые для всего мира стандарты.
следует читать
Вообще конечно это зависит от компилятора. Я смотрю на виртуалке Snow Leopard, там так. Попробовал сейчас на ideone.com — там иначе.
Идея следующая. Создаем objc-класс с парой методов.
Далее, фукнция печати селектора
И код main:
В результате имеем: s1 и s2 — селекторы существующих пользовательских методов; s3 — селектор несуществующего метода, но оформленный конструкцией языка selector; s4 и s5 — селекторы существующих пользовательских методов через функцию получения по строке (в рантайме); s6 — селектор несуществующего метода по строке в рантайме; s7 — селектор системного метода.
Вывод (Snow Leopard):
Видим, что селекторы существующих методов (добавленные на этапе компиляции) совпадают для разных способов получения селектора (оператором @ selector или рантаймовой фукнкцией).
Селектор несуществующего нигде метода methUnexist1 располагается «рядом» с селекторами существующих методов. Возможно, из этого можно сделать вывод, что он также был добавлен в таблицу на этапе компиляции (т.к. @ selector — конструкция времени компиляции)?
Селектор несуществующего метода methUnexist2 уже отличается от остальных… такое впечатление, что он как раз был создан динамически и добавлен в таблицу уже в рантайме.
И наконец, селектор системного метода init вообще очень сильно отличается по значению. Интерпретировать это я уже не могу:)
Я как-то смотрел исходники рантайма и проводил небольшие эксперименты, с похожей целью — выяснить как же работает этот механизм отправки сообщений. Селекторы, сформированные на этапе компиляции, имеют значения, сильно отличающиеся от селекторов этапа выполнения (видимо, это связано с тем, что существует две таблицы — статическая в секции константных данных и динамическая в куче).
Очень интересно, как селектор связывается с методом, сравнительный анализ этого с таблицами виртуальных функций (и можно ли эти два механизма объединить), реализация возможностей динамического добавления (и удаления?) методов из классов и т.д.
Нужно еще сделать вьюер с названием «Все ваши фотографии», видеоплеер «Все фильмы» и редактор «Все документы».
Это правда, очень хорошо когда такая возможность есть. Чтобы изменить поисковик на стартовой странице Оперы на Гугл, пришлось залезть куда-то во внутренности браузера и поменять в конфигах нескольких местах «RU» на «US». Но удалось таки! А вот удастся ли это людям, далеким от IT?
Правда, там ИМХО реализовали далеко не все возможности (на опеннете как раз и обсуждали что еще там не хватает:) )
Интересно, есть еще подобные проекты?
А уж если объединить такую софтину с эмулятором старого терминала, который уже обсуждался здесь…
Да и в быту полезно, на смартфон поставил — и анализатор определяет степень правдивости собеседника.
Удобно было бы для оформления кусков кода, а то выискивать моноширинный шрифт в огромном списке системных шрифтов неудобно и долго.
Роботы это хорошо, но сделайте обычные терминалы по типу банкомата. Самое то для регистрации в гостинице: и документы отсканировать (или как там у них регистрируются), и деньги принять (купюроприемник + считыватель банковских карт), и на сенсорном экране выбрать свободный номер, и выдать карточку-электронный ключ.
А то вот с NFC сейчас получилось так, что мой Galaxy s4 не читает некоторые карточки. Причем даже не потому что технически не может, а потому, что там какие-то патентные проблемы с некоторыми форматами.