所以我对某些事情不确定。我想要的是通过我所有不同的视图控制器来了解数据的一个类。这个类应该有一个我的对象数组,这样如果我有一个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?
}
谢谢!
答案 0 :(得分:1)
假设一个DataManager对象有一个名为" array"的NSMutableArray属性,那么你的目标是能够在你的所有代码中执行[DataManager sharedDataManager] .array。
这样做的方法是:
然后你的sharedInstance方法将是:
static DataManager *sharedDmgr = nil;
+ (id)sharedInstance {
if (sharedDmgr == nil) {
sharedDmgr = [[DataManager alloc] init];
}
return sharedDmgr;
}
全部完成。如果您需要一些示例代码,请告诉我。
答案 1 :(得分:0)
您可以为属性getter使用相同的延迟初始化模式。所以对于一个可变阵列......
@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;
}