在objective-c中初始化单身人士中的属性

时间:2012-04-06 03:41:00

标签: iphone

所以我对某些事情不确定。我想要的是通过我所有不同的视图控制器来了解数据的一个类。这个类应该有一个我的对象数组,这样如果我有一个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?
}

谢谢!

2 个答案:

答案 0 :(得分:1)

假设一个DataManager对象有一个名为" array"的NSMutableArray属性,那么你的目标是能够在你的所有代码中执行[DataManager sharedDataManager] .array。

这样做的方法是:

  • 将NSMutableArray *数组声明为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;
}

全部完成。如果您需要一些示例代码,请告诉我。

答案 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;
}