0

我有UIViewController子类。我有一些成员。我只是想知道/确认正确初始化成员的位置。注意:我有一个storyboardnot nib。这是界面:

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

我应该初始化输出字符串和第一个分数viewDidLoad吗,比如首先检查变量是否为空,然后分配和初始化它?还是有一些适当的方法可以做到这一点?

谢谢。

4

3 回答 3

0

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

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

}

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

于 2012-07-03T04:56:10.980 回答
0

你应该简单地初始化它们viewDidLoad

-(void)viewDidLoad {

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

    [super viewDidLoad];
}

不要忘记在 dealloc 中释放它们:

-(void)dealloc {

  [outputString release];
  [firstFraction release];
  [super dealloc];
}
于 2012-07-03T04:58:27.313 回答
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
于 2012-11-29T09:49:42.263 回答