0

なので、なんだか不安です。私が望むのは、すべての異なるビュー コントローラーを介してデータについて知る 1 つのクラスです。この 1 つのクラスにはオブジェクトの配列が含まれている必要があるため、detailViewController がある場合、DataManager が保持する配列内の 1 つのインスタンスを参照するだけになります。この DataManager はシングルトンになると思いました。シングルトンの作成に関するAppleのドキュメントに従いましたが、プロパティについて少し混乱しています。

static DataManager *sharedDmgr = nil;
+ (id)sharedInstance {
    if (sharedDmgr == nil) {
        sharedDmgr = [[super allocWithZone:NULL] init];
    }
    return sharedDmgr;
}

NSMutableArray プロパティが必要な場合、それを初期化する適切な方法は何ですか? 私は次のようなことをしますか

+ (id)sharedInstance {
    if (sharedDmgr == nil) {
        sharedDmgr = [[super allocWithZone:NULL] init];
        [self sharedInit];
    }
    return sharedDmgr;
}

- (void)sharedInit {
      // initialize all my properties for the singleton here?
}

ありがとう!

4

2 に答える 2

1

DataManager オブジェクトに「配列」という名前の NSMutableArray 属性があるとします。その場合、目的はすべてのコードで [DataManager sharedDataManager].array を実行できるようにすることです。

それを行う方法は次のとおりです。

  • NSMutableArray *array を DataManager.h @interface ブロックの属性として宣言します。
  • その属性の @property を宣言します。
  • - [DataManager init] メソッドで可変配列を初期化します。self.array = [NSMutableArray array]; のようなもの

次に、sharedInstance メソッドは次のようになります。

static DataManager *sharedDmgr = nil;
+ (id)sharedInstance {
    if (sharedDmgr == nil) {
        sharedDmgr = [[DataManager alloc] init];
    }
    return sharedDmgr;
}

すべて完了。サンプルコードが必要な場合はお知らせください。

于 2012-04-06T04:09:14.873 に答える
0

プロパティ ゲッターに同じ遅延初期化パターンを使用できます。したがって、可変配列の場合...

@interface DataManager ()
@property (strong, nonatomic) NSMutableArray *array;
@end 

@implementation DataManager
@synthesize array=_array;

// shared instance method like @fbernardo's suggestion

- (NSMutableArray *)array {

    if (!_array) {
        _array  = [[NSMutableArray alloc] init];
    }
    return _array;
}
于 2012-04-06T04:33:05.367 に答える