是否可以在Objective-C中动态实现协议?

Sof*_*mes 3 protocols dynamic objective-c ios

我知道我可以使用类扩展一个类(例如框架类),但是有可能有一个你不控制源代码的类实现你的一个自定义协议吗?我不仅希望在发送到实例时让它响应某些消息,而且理想情况下,在查询协议时,希望该类的对象在运行时类型检查时返回true.

小智 8

您可以定义符合协议的类别,因此您可以执行以下操作:

@interface UIWebView (MyGreatExtensions) <UITableViewDelegate>
@end

@implementation UIWebView (MyGreatExtensions)

- (CGFloat)tableView: (UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath {
  return 42.0;
}

// ...

@end
Run Code Online (Sandbox Code Playgroud)

需要考虑的一个小问题是,如果其他人试图做同样的事情(例如第三方框架也通过类别添加协议)那么你不能保证你的版本将被使用(当然也不能他们).

更多关于Mark Dalrymple的这种方法.