Uso del puntero de función de Objective-C

Si desea pasar una función methodA en ClassA a ClassB y llamarla directamente,

Aquí necesita usar punteros de función Por supuesto, puede pasar el objeto ClassA a ClassB, pero esto no se discute aquí.

Los escenarios especiales requieren, ya veces, un puntero a una función para su uso. Aquí, ClassA y ClassB se usan como ejemplos. La realización final es definir un puntero en ClassA en ClassB para llamar.

Primero definimos una Interfaz de ClassA:

// ClassA.h
@interface ClassA : NSObject
- (void)methodA:(NSString *)string;
@end

// ClassA.m
@implementation ClassA
- (void)methodA:(NSString *)string {
    NSLog(@"Hello from methodA: %@", string);
}
@end

Luego definimos un puntero de función MethodPointer en ClassB, de la siguiente manera:

// ClassB.h
@interface ClassB : NSObject
typedef void (^MethodPointer)(NSString *);
@property (nonatomic, copy) MethodPointer methodPointer;
- (void)methodB;
@end

// ClassB.m
@implementation ClassB
- (void)methodB {
    if (self.methodPointer) {
        self.methodPointer(@"Hello from methodB");
    }
}
@end

En el método de clase de ClassB, methodB es para llamar al puntero de función methodPointer, que en realidad llama a la función en ClassA.

El método de uso es el siguiente:

int main(int argc, const char * argv[]) {
    //初始化ClassA
    ClassA *a = [[ClassA alloc] init];
    //初始化ClassB
    ClassB *b = [[ClassB alloc] init];
    //把调用ClassA中的methodA的函数指针赋予给methodPointer指针
    b.methodPointer = ^(NSString *string) {
        [a methodA:string];
    };
    //调用ClassB中的函数methodB
    [b methodB];
}

Lo anterior es el uso de punteros de función en Object-C, que en realidad es similar al de C++.

Supongo que te gusta

Origin blog.csdn.net/wangmy1988/article/details/130110816
Recomendado
Clasificación