3

アプリケーションのある時点でサーバーから取得した変数全体を格納するオブジェクトまたはクラスのタイプを作成したいと考えています。次に、このオブジェクトまたはクラスの変数を使用または更新できるように、このオブジェクトまたはクラスをプロジェクト全体で使用できるようにします。

可能かどうかさえわからないので、どこから始めればよいかわかりません。

現在私が直面している問題は、これらすべてのオブジェクトがさまざまなクラスでデータを渡していることです。これらのオブジェクトをほとんどネストしており、このコードを追跡するのが非常に非効率的になっています。ただし、すべての値が最新の状態でどこからでもアクセスできるタイプのクラスがあれば、私の人生はずっと楽になります。

どんな助けや提案も大歓迎です。さらに情報が必要な場合はお知らせください。

4

4 に答える 4

2

データコンテナシングルトンを作成することをお勧めします。シングルトンは、プロジェクトの存続期間中に一度だけ作成されるオブジェクトです。オブジェクトをリクエストできるクラスメソッドがあります。

詳細については、「Cocoa シングルトン デザイン パターン」で検索してください。

クラス MyDataObject があり、クラス メソッド sharedDataObject がある場合があります。.m ファイルの内容は次のようになります。

@implementation MyDataObject
static _sharedDataObject;

+(MyDataObject) sharedDataObject
{
  if (!_sharedDataObject)
    _sharedDataObject = [[MyDataObject alloc] init];
  return _sharedDataObject;
}

@end

次に、必要に応じてデータ オブジェクトのヘッダーにプロパティを追加します。必要に応じて、データ オブジェクトのヘッダーを他のクラスに #import し、次のようなコードを使用します。

//To store a value to a property in the shared data object:
[MyDataObject sharedDataObject].someProperty = someValue;

//To fetch a value:
someValue = [MyDataObject sharedDataObject].someProperty;

共有データ オブジェクトのコンテンツを保持する必要がある場合は、共有データ オブジェクトを NSCoding に準拠させ、アプリがバックグラウンドに移行したときにそのコンテンツをファイルに保存し、起動時にファイルからそのコンテンツを読み込むことができます。

Cocoa と Cocoa touch は多くのシングルトン オブジェクトを使用することに注意してください。NSUserDefaults はシングルトンであり、NSFileManager も同様です。シングルトンのヒントは、クラス メソッドを使用して単一のオブジェクトを返すことです。多くの場合、Apple のフレームワークでは、クラス メソッドの名前は「shared」または「default」で始まります。

于 2013-10-24T01:31:47.317 に答える
2

シングルトンは行く方法です。

+(SharedClass *) sharedHelper {
    static sharedClass *sharedInstance = nil;
    static dispatch_once_t pred;

    dispatch_once(&pred, ^{
        sharedInstance = [sharedClass alloc];
        sharedInstance = [sharedInstance init];
    });
    return sharedInstance;
}
于 2013-10-24T01:22:13.053 に答える
0

シングルトンは、他のシングルトンと相互作用しないオブジェクトのために、プログラム内に 1 つのシングルトン オブジェクトを作成するための適切なパターンです。複雑な相互作用を持つシングルトン オブジェクトが多数ある場合は、オブジェクトの作成をより細かく制御する必要があります。AppDelegate を使用して、ApplicationDidFinishLaunching で AppDelegate のフィールドとしてシングルトンを作成できます。または、他のオブジェクトを含み、必要なロジックを持つ他のオブジェクトを作成する 1 つの Singleton オブジェクトを作成できます。

于 2013-10-24T04:14:49.970 に答える