我有UIViewController
个子类。我有一些成员。我只是想知道/确认正确初始化成员的地方。注意:我有storyboard
而不是nib
。
这是界面:
@interface FractionCalculatorViewController : UIViewController{
@private
NSMutableString *outputString;
Fraction *firstFraction;
}
我应该在viewDidLoad
中初始化输出字符串和第一个分数,比如首先检查变量是否为空,然后分配并初始化它?或者有一些正确的方法来做到这一点?
感谢。
答案 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