2012-07-03 4 views
0

У меня есть UIViewController подкласс. У меня есть некоторые члены. Я просто хотел узнать/подтвердить, что место для правильной инициализации членов. Примечание: У меня есть storyboard не nib. Вот интерфейс:Инициализация членов подкласса UIViewController один раз

@interface FractionCalculatorViewController : UIViewController{ 
    @private 
    NSMutableString *outputString; 
    Fraction *firstFraction; 
} 

Должен ли я инициализировать строку вывода и первой фракции в viewDidLoad, как первая проверка, если переменная равна нулю, а затем выделение и инициализацию его? Или есть какой-то правильный способ сделать это?

Спасибо.

ответ

0

Вам не нужно указывать их как null. Вы должны выделить и инициализировать их в методе viewDidLoad. Они будут инициализироваться, когда представление загружается только в память. Ниже приведен код.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    outputString=[[NSMutableString alloc] init]; 
    firstFraction=[[Fraction alloc] init]; 

} 

Если вы хотите инициализировать переменные один раз для приложения, поместите переменные в класс AppDelegate.

+0

ли это означает, что viewDidLoad будет вызывать каждый раз, когда ViewController видна экран или приходить активен из другого экрана или от фона? –

+0

Нет, viewDidLoad вызывается один раз, когда класс загружается в устройство. Если вы отпустите объект этого класса и снова создадите объект этого класса и нажмете на него свой контроллер навигации, то снова вызывается viewDidLoad этого класса. viewDidApear вызывается каждый раз, когда представление этого класса появляется перед вами. –

0

вы должны просто инициализировать их в viewDidLoad:

-(void)viewDidLoad { 

    outputString = [[NSMutableString alloc] init]; 
    firstFraction = [[Fraction alloc] init]; 

    [super viewDidLoad]; 
} 

не забудьте выпустить их в dealloc:

-(void)dealloc { 

    [outputString release]; 
    [firstFraction release]; 
    [super dealloc]; 
} 
0

Если инициализировать их в viewDidLoad они и инициализирует каждый раз загружает контроллер его взгляд. В соответствии с вашей бизнес-логикой это может быть неверно, потому что, возможно, вы хотите инициализировать их только один раз, а затем повторно использовать каждый раз для новой итерации в жизненном цикле ViewController. На мой взгляд, это лучше для инициализации таких данных в конструкторе следующим образом:

@interface ViewController() 

@property (nonatomic) NSMutableArray *productsToBuy; 

//... 

@end 

@implementation 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 

    if (self) 
    { 
     _productsToBuy = @[@"Milk", @"Bread", @"Cheese", @"Nuts"].mutableCopy; 

     //... 
    } 

    return self; 
} 

//... 

@end