Вопрос

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

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

Это было полезно?

Решение

Вызываются методы Objective-C selectors, и представлены 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:).

Другие советы

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

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

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

@selector(myFunctionWithObject:otherObject:)

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

[object performSelector:@selector(myFunction)];

или

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top