статическая переменная или AppDelegate - PullRequest
1 голос
/ 28 апреля 2011

Мне нужно использовать переменную NSDate в моей программе, и эта переменная будет dealloc и realloc (я должен добавить к этой дате месяц и год, и других возможностей нет).

Эта переменная должна быть пользователем во многих методах, и я хочу поместить эту переменную в глобальную. Есть ли другие варианты? Это не чисто, но я не знаю, как это сделать по-другому ...

Большое спасибо, чтобы помочь мне !!!

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Подумайте, для чего предназначена переменная, и где вы используете ее чаще всего. Тогда вам нужно было найти для этого естественное место.

Глобальные переменные не являются чем-то абсолютно ужасным и не являются синглетонами (которые могут здесь хорошо подойти). Но тогда, возможно, это действительно относится к пользовательским настройкам по умолчанию или к определенному контроллеру представления.

1 голос
/ 28 апреля 2011

В ответ на вопрос о том, есть ли другие варианты (и не говоря уже о том, нужно ли это делать).Один из вариантов - сделать класс специально для хранения переменных, которые вам нужны для глобального доступа.Один пример из этого сообщения в блоге

@interface VariableStore : NSObject
{
    // Place any "global" variables here
}
// message from which our instance is obtained
+ (VariableStore *)sharedInstance;
@end

@implementation VariableStore
+ (VariableStore *)sharedInstance
{
    // the instance of this class is stored here
    static VariableStore *myInstance = nil;

    // check to see if an instance already exists
    if (nil == myInstance) {
        myInstance  = [[[self class] alloc] init];
        // initialize variables here
    }
    // return the instance of this class
    return myInstance;
}
@end

Затем из других мест:

[[VariableStore sharedInstance] variableName]

Конечно, если вам не нравится, как они создают экземпляр синглтонаВ приведенном выше примере вы можете выбрать свой любимый шаблон здесь .Мне нравится сама модель dispatch_once.

1 голос
/ 28 апреля 2011

Я бы порекомендовал поместить его в ваш AppDelegate.Затем вы можете получить его через

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%@", [appDelegate myGlobalDate]);

Конечно, тогда вам понадобятся getter и setter для myGlobalDate в MyAppDelegate.

...