2012-04-06 4 views
0

Так что я немного не уверен в чем-то. Я хочу, чтобы один класс знал о данных через все мои разные контроллеры представлений. Этот один класс должен иметь массив моих объектов, так что если у меня есть detailViewController, я бы просто посмотрел на один экземпляр в моем массиве, который будет храниться DataManager. Я думал, что этот DataManager будет синглом. Я последовал за документацией Apple по созданию синглета, но теперь я немного запутался в свойствах.Инициализация свойств в одиночных играх в объекте-c

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

Спасибо!

ответ

1

Предположим, что объект DataManager имеет атрибут NSMutableArray с именем «array», тогда ваша цель - сделать [DataManager sharedDataManager] .array во всем вашем коде.

Способ сделать это было бы:

  • Объявите NSMutableArray * массив в качестве атрибута на @interface блоке DataManager.h.
  • Объявите свойство @property для этого атрибута.
  • В - [инициализатор DataManager] инициализируйте изменяемый массив. Что-то вроде 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; 
} 
Смежные вопросы