2013-08-01 2 views
-1

Я делаю следующее, чтобы инициализировать мой singelton:Инициализировать Singelton один раз в классе?

ChatDataController *box = [ChatDataController sharedInstance]; 

Проблема в том, что я использую * поле в разных местах, например, в этих методах:

- (void) viewDidAppear:(BOOL)animated 
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

Есть ли способ нужно только инициализировать один раз? так что * поле можно использовать в любом методе внутри данного класса?

+0

Простой. Создайте свойство «box» и инициализируйте его в методе 'init'. Зачем усложнять ситуацию? –

+0

Вы google "ios singleton"? –

ответ

-1

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html

В "Создание Singleton Instance"

static MyGizmoClass *sharedGizmoManager = nil; 

+ (MyGizmoClass*)sharedManager 
{ 
    if (sharedGizmoManager == nil) { 
     sharedGizmoManager = [[super allocWithZone:NULL] init]; 
    } 
    return sharedGizmoManager; 
} 
+0

У меня уже есть класс Singelton, им интересно, как использовать 'MyGizmoClass' :) – Alosyius

+0

Вы называете это следующим: yourGizmoClass = [MyGizmoClass sharedManager]; – Larme

2

Поместите этот код в ChatDataController

+ (ChatDataController *)sharedInstance 
{ 
    static ChatDataController *object = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     object = [[ChatDataController alloc] init]; 
    }); 
    return object; 
} 
+0

почему кто-то ниспроверг? – iNeal

-1

попробовать это один: - создать макрос в файл .PCH

первый класс импорта

#import"ChatDataController.h" 

затем создать макрос (sharedInstance должен быть метод класса)

#define box ([ChatDataController sharedInstance]) 

после, что и вы можете использовать этот объект во всех классах

+0

Контроллер данных чата не относится к PCH, и этот макрос просто заставит ваш код выглядеть запутанным, потому что 'box' будет выглядеть как локальная переменная. – Sebastian

+0

после этого pls сообщение самое лучшее разрешение если вы имеете любое –

0

Есть ли способ, чтобы только инициализацию один раз?

Если ChatDataController является одноэлементным, его можно инициализировать только один раз.

[ChatDataController sharedInstance] должен всегда возвращать тот же экземпляр и только alloc] init] при первом вызове.

Если, как вы упомянули в одном из комментариев, у вас уже есть свой синглтон, тогда просто вызовите [ChatDataController sharedInstance] всякий раз, когда вам нужен общий экземпляр. Нет необходимости хранить указатель на объект в свойстве.

+0

Почему вниз голосуете? – Sebastian

+0

Я дал +1 к этому ответу, поскольку я считаю, что он не заслуживает -1, поскольку он является правильным и информативным. – Popeye

Смежные вопросы