在我的 iPhone 应用程序中,我使用 AFHTTPClient 的子类来访问一个 REST Web 服务。我希望我的所有请求都由我的 API 客户端的一个实例处理,所以我使用单例模式。
当服务仅在一次 URL 上运行时,这可以正常工作。我可以使用一个常量值来设置 URL。
现在,在应用程序的最终版本中,每个应用程序实际上将与将安装在公司网络中的另一个服务通信。
所以我将从远程配置中获取服务 URL。单例模式在这里仍然是一个不错的选择吗?如果 URL 在应用程序运行时甚至可以更改,我应该如何对其进行参数化?
干杯
#import "FooAPIClient.h"
#import "AFJSONRequestOperation.h"
static NSString * const kFooAPIBaseURLString = @"http://192.168.0.1";
@implementation FooAPIClient
+ (instancetype)sharedClient {
static FooAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kFooAPIBaseURLString]];
});
return _sharedClient;
}
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
return self;
}
@end