ios - 重写 NSMutableUrlRequest 静态初始化程序?

标签 ios objective-c nsmutableurlrequest static-initializer

这是我的场景。我的大多数网络调用现在都需要在发出请求时将 api key 插入到 header 字段中。所以我在想我能做的就是制作一个 NSMutableUrlRequest 类别。覆盖其中一个初始化器。然后在那个初始化程序中,我可以将 api key 设置为 header 字段。所以每次我创建 NSMUTABLEURLREQUEST 的对象时,我需要的 header 字段都已经设置好了。如果你在这里查看苹果文档 NSMutableUrlRequest您可以看到该对象有 4 个初始化器、2 个类和 2 个实例方法。我列出我的问题

  1. 为了完成我的任务,我应该覆盖什么初始化函数?类还是实例?
  2. 我怎样才能覆盖它?是实例还是类初始值设定项?
  3. 这是解决问题的好方法吗?还是我应该将它子类化并像那样覆盖它?

我的代码已经写了一段时间了,我不想返回并将 api key 插入到每个单独的请求中,因为它们有很多。在某种程度上,我认为这是一种更好的方法,因为我只需将 apiKey 设置在一个地方而不是很多地方,这减少了编程错误的可能性。感谢您的帮助。

附言即使这不是完成此操作的好方法,有人仍然可以向我展示类初始化程序的工作原理吗?就像底层代码是什么一样,所以我也可以生成我自己的静态类初始值设定项。每次我尝试重写类方法时,我都不知道要返回什么类型。

谢谢你的帮助

最佳答案

类别并不是用来覆盖的。当您想要向现有类添加附加功能时,您可以使用类别。如果您真的想覆盖初始化器,请使用继承。

静态函数不是初始化程序,它们只是为您创建实例的辅助函数,因此无需处理它们。简单的 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;
}

关于ios - 重写 NSMutableUrlRequest 静态初始化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35078446/

相关文章:

ios - iOS 标签首行宽度不同

objective-c - NSURLConnection/CFURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)

ios - 使用 NSMutableURLRequest 将海关对象发布到 Web

ios - swift UITableView 滞后于图像

ios - 在 iOS 纵向模式下维护一个 View Controller ,在横向模式下维护另一个 View Controller

objective-c - 子类是否继承委托(delegate)回调?

ios - Objective-C:有条件地调用不同的属性

ios - 通过 SSL 请求 Web 服务

ios - 必须将 AirGoogleMaps 目录添加到您的 xCode 项目以支持 iOS React Native 上的 GoogleMaps

ios - Firebase 客户端 UID 和 Firebase 函数 UID 不匹配