Verwendung des Objective-C-Funktionszeigers

Wenn Sie eine Funktion methodA in ClassA an ClassB übergeben und direkt aufrufen möchten,

Hier müssen Sie Funktionszeiger verwenden. Natürlich können Sie das ClassA-Objekt an ClassB übergeben, aber das wird hier nicht besprochen.

Spezielle Szenarien erfordern und manchmal ist für die Verwendung tatsächlich ein Zeiger auf eine Funktion erforderlich. Hier werden ClassA und ClassB als Beispiele verwendet. Die endgültige Realisierung besteht darin, einen Zeiger in KlasseA in KlasseB zum Aufrufen zu definieren.

Zuerst definieren wir eine Schnittstelle der KlasseA:

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

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

Dann definieren wir einen Funktionszeiger MethodPointer in ClassB wie folgt:

// 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

In der Klassenmethode von ClassB ruft MethodeB den Funktionszeiger methodPointer auf, der tatsächlich die Funktion in KlasseA aufruft.

Die Verwendungsmethode ist wie folgt:

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];
}

Das Obige ist die Verwendung von Funktionszeigern in Object-C, die tatsächlich der in C++ ähnelt.

Ich denke du magst

Origin blog.csdn.net/wangmy1988/article/details/130110816
Empfohlen
Rangfolge