Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Joke+R
41 / 41 / 4
Регистрация: 18.11.2011
Сообщений: 112
#1

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

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

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

ПЫ.СЫ. прочитал некоторую информацию про селекторы (SEL) но с ним тоже не работает... выдается ошибка... возможно я просто не умею еще с ними работать... прошу помощи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 21:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ссылка на функцию (Objective-C):

Ссылка на функцию
Как сделать, чтобы в FuncT вместо integer можно было подставлять любой тип,...

1C 8.3 +DynamicWrapperX + ссылка на функцию
Всем доброго времени суток. Подвернулась задача написать внешнюю обработку для...

Ссылка на выбранную функцию
Добрый день. Помогите пожалуста с решение проблемы, есть функция int...

Инкапсуляция, ссылка на функцию
Делаю задание по инкапсуляции, реализовать 3 вида списков в 1 программе, причем...

Не работает ссылка на функцию.
Пожалуйста,Помогите найти ошибку.Мне нужно сделать ссылку на функцию, которая...

Ссылка на функцию экземпляра объекта
У меня есть внутриигровое окно, и элемент кнопка на нём. (аналог window form)...

8
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
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

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

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

Блин я никак не могу вьехать в Objective C
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
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
}];
1
Joke+R
41 / 41 / 4
Регистрация: 18.11.2011
Сообщений: 112
05.07.2013, 13:14  [ТС] #7
Vorona, спасибо! наверное так и напишу, с помощью блоков...
0
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
05.07.2013, 13:29 #8
в методе передвижения? Или у Вас не обязательно создавать обьект класса?
что же у вас за приложение такое? может вы еще про синглетон не слышали?

использование объектов для делегирования в Obj-C используется повсеместно, блоки удобны, однако не всегда к ним нужно прибегать
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
05.07.2013, 14:23 #9
p.s. вспомнил про статью на хабре, если кому интересно
http://habrahabr.ru/company/e-Legion/blog/175365/
1
05.07.2013, 14:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 14:23
Привет! Вот еще темы с решениями:

Ссылка на функцию класса (не указатель)
можно ли делать ссылки на функции класса? например класс: class cdPolygon2D...

Ссылка на void функцию контрола
В проекте использую сторонние компоненты InstrumentLab, это стрелочные и...

Thread ссылка на удаленную функцию о_О
Добрый день Начал росбираться с потоками на C++ и после 5 минут наткнулся на...

Ошибочная ссылка на процедуру или функцию
program Trapezia; uses crt,graph; const points:array of...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru