Прежде чем вызывается метод main, объекты не создаются. Наличие ключевого слова static означает, что метод может быть вызван без предварительного создания каких-либо объектов.
Методы 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:)
.
Да! В 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 уже основан на полностью динамической таблице диспетчеризации методов.