初始化UIViewController子类的成员一次

时间:2012-07-03 04:48:31

标签: iphone objective-c

我有UIViewController个子类。我有一些成员。我只是想知道/确认正确初始化成员的地方。注意:我有storyboard而不是nib。 这是界面:

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

我应该在viewDidLoad中初始化输出字符串和第一个分数,比如首先检查变量是否为空,然后分配并初始化它?或者有一些正确的方法来做到这一点?

感谢。

3 个答案:

答案 0 :(得分:0)

您不需要将它们检查为null。您应该在viewDidLoad方法中分配和初始化它们。当视图仅在内存中加载时,它们将被初始化。以下是代码。

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

}

如果要为应用程序初始化变量一次,则将变量放在AppDelegate类中。

答案 1 :(得分:0)

您只需在viewDidLoad中初始化它们:

-(void)viewDidLoad {

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

    [super viewDidLoad];
}

不要忘记在dealloc中发布它们:

-(void)dealloc {

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

答案 2 :(得分: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