Pull to refresh
63
1.4

Programmer

Send message
опечатка, не успел исправить: вместо
SEL s6 = NSSelectorFromString(init);

следует читать
SEL s7 = @selector (init);
Отличаются в смысле самих числовых значений селекторов.
Вообще конечно это зависит от компилятора. Я смотрю на виртуалке Snow Leopard, там так. Попробовал сейчас на ideone.com — там иначе.
Идея следующая. Создаем objc-класс с парой методов.
@interface c1 : NSObject {}
- (int) meth1 : (int) arg;
- (int) meth2 : (int) arg;
@end

@implementation c1
- (int) meth1 : (int) arg { return arg+2; }
- (int) meth2 : (int) arg { return arg+20; }
@end


Далее, фукнция печати селектора
void print_sel(SEL s)
{
	printf("SEL %08X = %s\n", s, s);
}


И код main:
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 вообще очень сильно отличается по значению. Интерпретировать это я уже не могу:)
У меня нет никакой рекламы:) Наверное версия старая (3.1.2), но торренты качает нормально.
Отличная статья, надеюсь на продолжение! Язык действительно классный, несмотря на необычный синтаксис. Классный именно своими динамическими возможностями.
Я как-то смотрел исходники рантайма и проводил небольшие эксперименты, с похожей целью — выяснить как же работает этот механизм отправки сообщений. Селекторы, сформированные на этапе компиляции, имеют значения, сильно отличающиеся от селекторов этапа выполнения (видимо, это связано с тем, что существует две таблицы — статическая в секции константных данных и динамическая в куче).
Очень интересно, как селектор связывается с методом, сравнительный анализ этого с таблицами виртуальных функций (и можно ли эти два механизма объединить), реализация возможностей динамического добавления (и удаления?) методов из классов и т.д.
Полез искать что за «интернет»:) это мейлру чтоли? Прикольное название, заценил. И самое главное — удалять страшно! Вопрос винды будет «Вы действительно хотите удалить Интернет с вашего компьютера?».
Нужно еще сделать вьюер с названием «Все ваши фотографии», видеоплеер «Все фильмы» и редактор «Все документы».
В моих фантазиях я, конечно, думаю: еще было бы хорошо, чтобы человек в любой момент мог легко изменить поисковую систему по умолчанию.

Это правда, очень хорошо когда такая возможность есть. Чтобы изменить поисковик на стартовой странице Оперы на Гугл, пришлось залезть куда-то во внутренности браузера и поменять в конфигах нескольких местах «RU» на «US». Но удалось таки! А вот удастся ли это людям, далеким от IT?
Один из огромного множества вариантов. И скорее всего нереальный. Вы пытаетесь оценить будущее, используя ценности настоящего:)
Вот интересная ссылка — программа, имитирующая хакерский интерфейс из голливудских фильмов
Правда, там ИМХО реализовали далеко не все возможности (на опеннете как раз и обсуждали что еще там не хватает:) )
Интересно, есть еще подобные проекты?
А уж если объединить такую софтину с эмулятором старого терминала, который уже обсуждался здесь
Ну не знаю, galaxy s4 прекрасно пишет все разговоры официальным приложением galaxy call recorder.
Из статьи не понял, а как его включать/выключать?
Жду когда такие программы появятся в свободном доступе. Можно будет анализировать речи политиков:)
Да и в быту полезно, на смартфон поставил — и анализатор определяет степень правдивости собеседника.
Когда все фичи старой оперы хотя-бы реализуют?
поправка — да, есть — но работает для всего текста, а не для выделенного фрагмента. И «убрать форматирование» работает как-то странно — шрифт оказывается не тот, который в заметке по умолчанию
Это вроде есть: контекстное меню в окне редактора — «упростить форматирование» и «убрать форматирование».
Сделайте пожалуйста кнопочку на панели форматирования, чтобы форматировала выделенный текст моноширинным шрифтом (и, может быть, в какой-то рамочке или на каком-то слегка другом фоне… хотя и не обязательно).
Удобно было бы для оформления кусков кода, а то выискивать моноширинный шрифт в огромном списке системных шрифтов неудобно и долго.
Странные они, японцы… Зачем делать роботов, копирующих человека? Если честно, такое немного пугает.
Роботы это хорошо, но сделайте обычные терминалы по типу банкомата. Самое то для регистрации в гостинице: и документы отсканировать (или как там у них регистрируются), и деньги принять (купюроприемник + считыватель банковских карт), и на сенсорном экране выбрать свободный номер, и выдать карточку-электронный ключ.
И выражение «нерукопожатный» приобретет физический смысл:)
Если они все будут соответствовать единому стандарту — то ничего.
А то вот с NFC сейчас получилось так, что мой Galaxy s4 не читает некоторые карточки. Причем даже не потому что технически не может, а потому, что там какие-то патентные проблемы с некоторыми форматами.
А если человек уволится и устроится в другую компанию? Старый чип вытаскивать что-ли и новый вставлять? А накапливать чипы в теле не хотелось бы, да и они будут создавать помехи друг другу при считывании. Поэтому если уж чипировать, то конечно при рождении, и использовать при этом единые для всего мира стандарты.

Information

Rating
1,676-th
Registered
Activity