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

Objective-C

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

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

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

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

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

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

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

Ссылка на выбранную функцию - Visual C++
Добрый день. Помогите пожалуста с решение проблемы, есть функция int function(int x) расчитывает значение от аргумента x но вот...

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

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

Ссылка на void функцию контрола - C++ Builder
В проекте использую сторонние компоненты InstrumentLab, это стрелочные и цифровые индикаторы. у компонентов есть поле Value для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 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 / 3
Регистрация: 18.11.2011
Сообщений: 112
05.07.2013, 12:12  [ТС] #3
Цитата Сообщение от Vorona Посмотреть сообщение
а что именно и как должно работать?
Объясню ситуацию:
Пишу тетерис. Есть класс фигур, есть графический движок. Хотел написать так: в методе передвижения фигуры запустить перерисовку на игровом поле. Для того чтоб попрактиковаться в языке хотел запускать метод перерисовки фигуры не напрямую от глобального графического движка, а через ссылку на метод...
Возможно ли это?
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
05.07.2013, 12:19 #4
а через ссылку на метод...
легко

Objective-C
1
[ГрафическийДвижок perfomSelector:@selector(МойМетод:) withObject: self];
1
Joke+R
41 / 41 / 3
Регистрация: 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
668 / 530 / 45
Регистрация: 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 / 3
Регистрация: 18.11.2011
Сообщений: 112
05.07.2013, 13:14  [ТС] #7
Vorona, спасибо! наверное так и напишу, с помощью блоков...
0
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
05.07.2013, 13:29 #8
в методе передвижения? Или у Вас не обязательно создавать обьект класса?
что же у вас за приложение такое? может вы еще про синглетон не слышали?

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

Ошибочная ссылка на процедуру или функцию - Turbo Pascal
program Trapezia; uses crt,graph; const points:array of string=('O_programe','Vvod_dannbix','graphicheskaa_chast','exit'); var...

Ссылка в Excell на созданную пользователем функцию. - VBA
Привет! Создал я ф-ию в Excel. Ввожу в ячейке =MyFunction(...) Все работает. Но если я копирую лист с этими данными в другую книгу, то...

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

Что передаётся в функцию, если в прототипе ссылка? - C++
void swap(int &, int &); int main() { /* ... */ swap(x,y); /* ... */ } void swap(int &rx, int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.07.2013, 14:23
Ответ Создать тему
Опции темы

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