Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
#1

Ссылка на функцию - Objective-C

04.07.2013, 21:02. Просмотров 760. Ответов 8
Метки нет (Все метки)

Здравствуйте уважаемые Форумчане! Пожалуйста подскажите начинающему Objective c разработчику, возможно ли реализация ссылки на функцию в этом языке (или что то схожее с делегатами из C#). Облазил много всякой всячины но ничего не нашел...

ПЫ.СЫ. прочитал некоторую информацию про селекторы (SEL) но с ним тоже не работает... выдается ошибка... возможно я просто не умею еще с ними работать... прошу помощи.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
666 / 528 / 44
Регистрация: 05.03.2010
Сообщений: 1,271
05.07.2013, 01:39     Ссылка на функцию #2
Цитата Сообщение от Joke+R Посмотреть сообщение
прочитал некоторую информацию про селекторы (SEL) но с ним тоже не работает
а что именно и как должно работать?
селекторы впринципе мощный механизм, есть также блоки, но остановимся пока что на первом
Objective-C
1
2
3
4
5
6
7
- (void)doSomething:(NSObject *)smth forSomeone:(NSObject *)smn
{
   // method implementation . . .
}
 
SEL aSelector = @selector(doSomething:forSomeone:);
[self perfomSelector:aSelector withObject:smth withObject:smn];
для большего кол-ва параметров используйте либо функцию objc_msgSend, либо класс NSInvocation

А насчет блоков - тут хорошие ресурсы
Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
05.07.2013, 12:12  [ТС]     Ссылка на функцию #3
Цитата Сообщение от Vorona Посмотреть сообщение
а что именно и как должно работать?
Объясню ситуацию:
Пишу тетерис. Есть класс фигур, есть графический движок. Хотел написать так: в методе передвижения фигуры запустить перерисовку на игровом поле. Для того чтоб попрактиковаться в языке хотел запускать метод перерисовки фигуры не напрямую от глобального графического движка, а через ссылку на метод...
Возможно ли это?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 581
05.07.2013, 12:19     Ссылка на функцию #4
а через ссылку на метод...
легко

Objective-C
1
[ГрафическийДвижок perfomSelector:@selector(МойМетод:) withObject: self];
Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
05.07.2013, 12:24  [ТС]     Ссылка на функцию #5
noname_club, а чем это отличается от:
Objective-C
1
[ОбьектГрафическийДвижок DrawFigure:fig1];
в методе передвижения? Или у Вас не обязательно создавать обьект класса?

Блин я никак не могу вьехать в Objective C
Vorona
Peace 2 all shining faces
666 / 528 / 44
Регистрация: 05.03.2010
Сообщений: 1,271
05.07.2013, 13:08     Ссылка на функцию #6
ну таким образом вы можете передать selector параметром и выполнить его потом

есть еще понятие делегата, обычный паттерн, чаще всего используется при разработке для делегирования действий другому объекту

обратите внимание на блоки, удобная штука, тут и въезжать особо не нужно, аналогичны анонимным функциям
выше скинул ссылку на пост с ресурсами, там хорошо демонстрируется их работа на примере с фильмом
также этот блок можно хранить в переменной и передавать параметром в функцию как переменную и т.д.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (void)moveFigureWithRedrawAreaBlock:(void (^)(void))redrawBlock
{
    // do something
    // when some condition
    redrawBlock();
    // do some other stuff
}
 
// somewhere else . . .
 
[self moveFigureWithRedrawAreaBlock:^(void) {
    // redraw area
    // will be called as redrawBlock() function
}];
Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
05.07.2013, 13:14  [ТС]     Ссылка на функцию #7
Vorona, спасибо! наверное так и напишу, с помощью блоков...
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 581
05.07.2013, 13:29     Ссылка на функцию #8
в методе передвижения? Или у Вас не обязательно создавать обьект класса?
что же у вас за приложение такое? может вы еще про синглетон не слышали?

использование объектов для делегирования в Obj-C используется повсеместно, блоки удобны, однако не всегда к ним нужно прибегать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 14:23     Ссылка на функцию
Еще ссылки по теме:

Ошибочная ссылка на процедуру или функцию Turbo Pascal
C++ Builder Ссылка на void функцию контрола
1С 1C 8.3 +DynamicWrapperX + ссылка на функцию
Thread ссылка на удаленную функцию о_О C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
666 / 528 / 44
Регистрация: 05.03.2010
Сообщений: 1,271
05.07.2013, 14:23     Ссылка на функцию #9
p.s. вспомнил про статью на хабре, если кому интересно
http://habrahabr.ru/company/e-Legion/blog/175365/
Yandex
Объявления
05.07.2013, 14:23     Ссылка на функцию
Ответ Создать тему
Опции темы

Текущее время: 23:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru