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

Прежде чем вызывается метод main, объекты не создаются. Наличие ключевого слова static означает, что метод может быть вызван без предварительного создания каких-либо объектов.

7
задан Brian Tompsett - 汤莱恩 29 September 2016 в 20:43
поделиться

2 ответа

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

16
ответ дан 6 December 2019 в 08:16
поделиться

Да! В 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 уже основан на полностью динамической таблице диспетчеризации методов.

6
ответ дан 6 December 2019 в 08:16
поделиться