如果想把ClassA中的一个函数methodA,传到ClassB中直接调用,
这里就需要用到函数的指针,当然你可以把ClassA对象传给ClassB,但是这里不讨论这种。
特殊场景需要,有时候的确是需要一个函数的指针进行使用,这里利用ClassA和ClassB进行举例。最终实现在ClassB中定义一个ClassA里面的指针进行调用。
首先我们定义一个ClassA的Interface:
// ClassA.h
@interface ClassA : NSObject
- (void)methodA:(NSString *)string;
@end
// ClassA.m
@implementation ClassA
- (void)methodA:(NSString *)string {
NSLog(@"Hello from methodA: %@", string);
}
@end
然后我们在ClassB中,定义一个函数指针MethodPointer,具体如下:
// 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
在ClassB的类方法中methodB就是调用函数指针methodPointer,其实调用的是ClassA中的函数。
使用方法如下:
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];
}
以上,就是Object-C中函数指针的用法,其实和C++中的类似。