0

所以我有点不确定。我想要的是通过我所有不同的视图控制器了解数据的一类。这个类应该有一个我的对象数组,所以如果我有一个 detailViewController,我只会查看我的数组中 DataManager 将持有的一个实例。我认为这个 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 对象有一个名为“array”的 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 回答