【问题标题】:Calling an instance method when subclassing NSURLProtocol继承 NSURLProtocol 时调用实例方法
【发布时间】:2013-08-08 07:36:01
【问题描述】:

所以我不得不继承 NSURLProtocol,因为我使用的是 UIWebView 并且想要拦截 ajax 调用,根据this example 可以正常工作。我必须从+ (BOOL)canInitWithRequest:(NSURLRequest *)request 的请求中获取数据,这会导致问题,我现在需要调用实例方法来处理数据,但我不能,因为它是一个类方法。

如何根据请求中的内容调用实例方法?

【问题讨论】:

  • 您需要调用的这些方法是否需要访问实例变量,或者您可以重构这些方法,使其成为类方法?
  • 是的,不幸的是。

标签: objective-c class instance nsurlprotocol


【解决方案1】:

如果没有实例,就不能从类方法调用实例方法。这适用于所有面向对象的系统,AFAIK。毕竟,实例方法(通常)使用类方法不能拥有的数据。想象一个具有属性name 的对象,您现在拥有一千个具有不同名称的对象。类方法应该如何知道使用哪个name?

因此,您需要找到一种方法来根据您的请求以某种方式查询您的类的实例,或者找到一种方法以不涉及实例变量的方式获取信息(如果方法不使用实例变量你可以把它变成一个类方法甚至 C 函数)。解决“查询问题”有很多不同的方法,选择哪种方法很大程度上取决于您的设计甚至品味。

【讨论】:

    【解决方案2】:

    canInitWithRequest: 不应该做任何工作,它应该只响应“YES”或“NO”。 “startLoading”是你工作的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      相关资源
      最近更新 更多