使用类别覆盖NSURL方法

Sea*_*ser 2 objective-c nsurl ios objective-c-category

分类问题:

我想在NSURL上放置一个类别,在执行其他操作时,会覆盖查询方法,以便能够从不符合RFC 1808的URL提供查询字符串.在我的类别中做这样的事情是否合法:

- (NSString *)query //real NSURL method
{
     if (stringIsRFC1808) //want to get the default implementation
          return [super query];
     else 
          return somethingElse; //want to get my custom implementation
}
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 6

代码按原样无效,因为您正在使用[super query]- 这并不能完全按照您的预期执行.类别不是超类.这里[super query]将尝试调用- [NSObject query]- BOOM无法识别的选择器错误.如果你使用类别来扩展一个类,你将无法调用原始方法 - 如果你不需要这个功能,那么使用类别就没问题,如果你确实需要它,你应该考虑子类化,(甚至更好的基础对象组合!)或使用Objective-C运行时执行方法调配 - 这样您就可以访问该方法的原始实现.

  • downvote的原因是什么?你的连续贬低我吗? (3认同)
  • +1 IMO SO应该在投票时作出必要评论,甚至更好地让用户决定是否合理投票,如果不投票则取消投票 (2认同)