Objective-c怎么样调用其他文件方法,参数是个回调方法
时间: 2024-09-23 22:09:35 浏览: 41
在Objective-C中,如果你想要在一个类中调用另一个类的方法,并将一个回调函数作为参数传递,通常会使用blocks、NSInvocation或者委托(Delegation)模式。
1. **Blocks**: 可以将Block作为一种参数传递给其他方法。例如:
```objective-c
-(void)someMethodWithCallback:(void(^)(NSString *result))callback {
// 执行一些操作
NSString *result = ...;
callback(result);
}
```
2. **NSInvocation**: 如果需要动态地调用某个方法,可以创建一个NSInvocation实例并设置其目标和 selector,然后在适当的时候发送invocation消息:
```objective-c
void (^myCallback)(id result) = ^{ ... };
NSMethodSignature *signature = [self class].instanceMethodSignatureForSelector:@selector(callbackMethod:);
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setSelector:@selector(callbackMethod:)];
[invocation setTarget:self];
[invocation invokeWithObject:result];
```
3. **委托模式 (Delegation)**: 将回调方法暴露在协议中,让其他对象遵守这个协议并在特定时刻调用该方法。比如:
```objective-c
@protocol CallbackProtocol
- (void)performTaskWithCompletion:(void(^)(BOOL success, NSError *error))completion;
@end
-(void)startTaskWithCompletion:(void(^)(BOOL success, NSError *))completion {
// 调用委托对象的方法
[self.delegate performTaskWithCompletion:completion];
}
```
记得,在使用这些方法时,确保接收方的对象实现了相应的协议或方法,并且理解回调何时以及如何执行。
阅读全文