覆盖NSMutableUrlRequest静态初始化程序?

时间:2016-01-29 06:45:03

标签: ios objective-c nsmutableurlrequest static-initializer

继承我的情景。我的大多数网络呼叫现在需要在发出请求时将api密钥插入头字段。所以我想我能做的就是制作一个NSMutableUrlRequest类别。覆盖其中一个初始化者。然后在那个初始化器中,我可以将api密钥设置为头字段。所以每当我创建NSMUTABLEURLREQUEST的对象时,我需要的头字段已经设置好了。如果你在这里查看apple doc NSMutableUrlRequest,你可以看到该对象有4个初始化器2个类和2个实例方法。我列出了我的问题

  1. 我应该覆盖哪些初始化函数才能完成我的任务?班级或实例?
  2. 我如何覆盖它?如果它是一个实例或类初始化器?
  3. 这是一个很好的方法吗?或者我应该将其子类化并覆盖它?
  4. 我的代码已经编写了一段时间了,我不想回去并将api密钥插入到每个单独的请求中,因为很多都是这样。在某种程度上,我认为这是一个更好的方法,因为生病只需要将apiKey设置在一个地方而不是很多地方,这可以减少编程错误的可能性。谢谢你的帮助。

    P.S。即使这不是完成这个的好方法,有人还能告诉我类初始化程序是如何工作的吗?像什么是底层代码,所以我也可以生成自己的静态类初始化器。每次我尝试覆盖类方法时,我都无法确定要返回的类型。

    感谢您的帮助

1 个答案:

答案 0 :(得分:1)

类别并不意味着用于覆盖。如果要向现有类添加其他功能,可以使用类别。如果你真的想要覆盖初始化器,那么使用继承。

静态函数不是初始化函数,它们只是为您创建实例的辅助函数,因此不需要处理它们。简单的initWithURL:方法只是一个简化版本,它为指定的初始化程序initWithURL:cachePolicy:timeoutInterval:提供默认值;所以在你的子类中,你实际上只需要覆盖这个单一的初始化器,看起来像这样:

@interface MyNSMutableURLRequest : NSMutableURLRequest
@end

@implementation MyNSMutableURLRequest

- (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval {
    self = [super initWithURL:URL cachePolicy:cachePolicy timeoutInterval:timeoutInterval];
    if (self) {
        //do your stuff here
    }
    return self;
}