Как я могу выделить и инициализировать объект, чтобы он не перезагружался снова, когда ViewDidLoad загружается? - PullRequest
0 голосов
/ 07 февраля 2011

Я инициализировал объект делегата в ViewDidLoad моего ViewController , но когда я снова загружаю его, он снова инициализирует значение.

Я сохраняю какой-то массив в том объекте делегата, к которому я хочу получить доступ, используя getObject и setObject. Что я должен сделать, чтобы объект делегата не инициализировался каждый раз при вызове ViewDidLoad?

Ответы [ 4 ]

1 голос
/ 07 февраля 2011

Рассматривали ли вы эту стратегию:

  • После запуска вашего приложения, до того, как этот конкретный объект будет инициализирован и использован, установите для него значение nil.
  • В первый раз, когда ваше приложение пытается использовать его, проверьте, все ли оно равно нулю (должно быть, так как это в первый раз), затем инициализируйте его и используйте
  • Для остальной части жизненного цикла вашего приложения, всякий раз, когда ваше приложение снова запускает метод viewDidLoad, всегда проверяйте, является ли этот объект нулевым или нет (в этот момент он не должен быть нулевым). Это сэкономит вашему приложению время и усилия при попытке инициализировать объект, который уже был инициализирован.

Однако, когда вы используете эту стратегию, вы должны знать, что значение этого конкретного объекта должно оставаться неизменным на протяжении всего жизненного цикла вашего приложения. В противном случае это не сработает.

0 голосов
/ 07 февраля 2011

Как все говорят, вам, вероятно, нужен одноэлементный объект. Самый простой способ сделать это так:

// interface

@interface MyViewController
{ ... }

+(DelegateType*) theDelegate;

...

@end

// implementation

@implementation MyViewController

+(DelegateType*) theDelegate
{
    static DelegateType* theDelegate = nil;

    if (theDelegate == nil)
    {
        theDelegate = [[DelegateType alloc] init];
    }
    return theDelegate;
}

@end

// To use it 

    [foo setDelegate: [MyViewController theDelegate]];
0 голосов
/ 07 февраля 2011

Если вы хотите где-то, чтобы все выполнялось только один раз, это обычно где-то в Синглтоне - объект, который создается один раз и на него ссылаются со всех сторон.

AppDelegate - это синглтон по умолчанию, который вы получаете бесплатно,Но если через какое-то время вы решите, что в AppDelegate будет слишком много, полезно создать различные объекты Singleton, в которые вы будете вставлять пользовательские данные.

Существует множество примеров, показывающих, как создать Singleton,теперь, когда вы знаете термин, который вы ищете.

0 голосов
/ 07 февраля 2011

Вы должны инициализировать только элементы пользовательского интерфейса в viewDidLoad.Все остальное должно быть инициализировано в конструкторе (initWith ...)

...