Для Objective-C... Указатель на метод

116
10

Я хочу настроить таблицу отправки методов, и мне интересно, можно ли создать указатель на метод в Objective-C (например, указатель на функцию в C). Я попытался использовать некоторые функции времени выполнения Objective-C для динамического переключения методов, но проблема в том, что это повлияет на все экземпляры.


Поскольку я очень новичок в Objective-C, иллюстрированный пример будет высоко оценен.

спросил(а) 2009-07-05T07:57:00+04:00 11 лет, 4 месяца назад
1
Решение
171

Objective-C методы называются selector s и представлены типом SEL. Если ваш объект наследуется от NSObject, вы можете сказать ему выполнить селектор (т.е. Вызвать метод), например:


SEL selector = @selector(doSomething:);
[obj performSelector:selector withObject:argument];

Это предполагает, что у вас есть определенный метод:


-(void)doSomething:(MyObject*)arg;

Селекторы назначаются SEL типам данных через ключевое слово @selector, которое берет имя метода, который вы хотите сохранить. Имя метода - это имя метода, лишенное всех аргументов. Например:


-(void)doSomething:(MyObject*)arg withParams:(MyParams*)params

Будет называться @selector(doSomething:withParams:).

ответил(а) 2009-07-05T08:03:00+04:00 11 лет, 4 месяца назад
100

Да! В Objective-C указатели на функции называются селекторами. Если у вас есть метод, определенный следующим образом:


- (void)myFunctionWithObject:(NSObject*)obj otherObject:(NSNumber*)obj2
{
}

Селектор объявляется следующим образом:


@selector(myFunctionWithObject:otherObject:)

Чтобы выполнить селектор объекта, вы можете использовать:

[object performSelector:@selector(myFunction)];

или


[object performSelector:@selector(myFunctionTakingParameter:) withObject: o];

Тип данных селектора особенно полезен для потоков и таймеров, где вы можете отправить поток и предоставить ему селектор для сообщения, которое вы хотите вызвать. Если вам нужно создать массив селекторов (или таблицу рассылки) или вам нужно вызвать селектор с несколькими параметрами, вы можете использовать класс NSInvocation. Он предоставляет оболочку для селектора и позволяет вам указывать фактические аргументы.


Вы должны помнить, что Objective-C уже основан на таблице динамической рассылки динамических методов. Похоже, что сохранение указателей функций с помощью селекторов будет работать отлично для вас, если вам просто нужна ссылка на функцию.

ответил(а) 2009-07-05T08:04:00+04:00 11 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема