2012-04-06 17 views
0

なので、私は何かについてよく分かりません。私が望むのは、1つのクラスがすべての異なるView Controllerを介してデータを知ることです。この1つのクラスは、私のオブジェクトの配列を持つ必要がありますので、detailViewControllerを持っていれば、DataManagerが保持する配列内のインスタンスを1つだけ探します。私はこのDataManagerがシングルトンであると考えました。私はシングルトンを作成するためのAppleの文書に従っていましたが、今は少し混乱しています。Objective-cのシングルトンでプロパティを初期化する

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? 
} 

ありがとう!

答えて

1

DataManagerオブジェクトに "array"という名前のNSMutableArray属性があるとすると、すべてのコードで[DataManager sharedDataManager] .arrayを実行できるようにすることです。それを行うには

方法がすることです:

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

その後、あなたのsharedInstanceの方法は次のようになります。

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

はすべて完了です。いくつかのサンプルコードが必要な場合は教えてください。

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; 
} 
関連する問題