0

UIViewControllerサブクラスがあります。メンバーが何人かいます。メンバーを適切に初期化する場所について知りたい/確認したかっただけです。注:私は持っていstoryboardませんnib。インターフェースは次のとおりです。

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

viewDidLoad最初に変数がnullかどうかをチェックしてから、それを割り当てて初期化するように、出力文字列と最初の小数部を初期化する必要がありますか?またはそれを行うためのいくつかの適切な方法がありますか?

ありがとう。

4

3 に答える 3

0

それらを初期化するとviewDidLoad、コントローラーがビューをロードするたびに初期化されます。ビジネスロジックによると、これは正しくない可能性があります。おそらく、それらを1回だけ初期化してから、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 に答える
0

nullとしてチェックする必要はありません。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 に答える