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++.