を持つシングルトンパターン、私はAFHTTPClientのサブクラスを使用して、残りのWebサービスにアクセスしています。 APIクライアントの1つのインスタンスですべてのリクエストを処理したいので、シングルトンパターンを使用します。私のiPhoneアプリケーションでパラメータ
これは、サービスが一度だけの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
実際にコードを記述する必要があります。 URLが連続的に変化する場合、シングルトン上の「URL変更」機能の単純な問題です。複数のURLを同時にアクティブにすることができれば、ある種のディレクトリや配列の配列が必要です。そうでない場合は、それを使ってコードによってインスタンスが所有されます。 –
URLは一度に1つしかできません。問題は、一度インスタンス化されると、AFHTTPClientはそのURLを変更できないということでした。ですから、解決策はAFHTTPClientを拡張するのではなく、自分のクライアントのプライベートプロパティとして持つことです。 URLが変更された場合、私は自分のシングルトンに新しいAFHTTPClientをインスタンス化できます。それはそれを行う必要があります。 – Jan