0
- (void)viewDidAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    _datePicker = [[UIDatePicker alloc] init];
    _datePicker.datePickerMode = UIDatePickerModeDate;

    _datePicker.frame = CGRectMake(70, self.view.frame.size.height ,250,100);
    _datePicker.alpha = 0;
    [_datePicker addTarget:self action:@selector(saveDate:)  forControlEvents:UIControlEventEditingDidEnd];
    [self.view addSubview:_datePicker];
}

「無制限のメモリ増加」がどこにあるかを把握しようとしています。アプリでARCを使用しています。アプリにいくつかのメモリの問題があり、それらを1つずつ把握しようとしています。

2つのviewController間を移動していると、メモリ使用量が大幅に増加していることがはっきりとわかりますが、その主な原因は、ここで記述したコードです。何が間違っているのですか、どうすればそれをどこでリリースできますか?

ありがとう

4

1 に答える 1

1

viewDidAppear: ビューが表示されるたびに呼び出されます (コントローラーが既に初期化されている場合でも)。したがって、ビューが表示されるたびに、古いものを解放せずに新しい UIDatePicker を割り当てます。

あなたのdatePickerが「retain」を持つ@propertyとして定義されている場合、私は使用します

self.datePicker = [[[UIDatePicker alloc] init] autorelease];

self.datePicker を使用することで、古い値を自動的に解放する合成セッターを呼び出します。

別の方法として、この初期化を initWithNibName: または viewDidLoad: に移動することもできます。これにより、一度だけ呼び出されます。

これを試して、記憶に役立つかどうかを確認してください。

(私はあなたが ARC を使用していないと仮定しています。そうでなければ、私が言ったことは本当に役に立ちません)。

于 2013-01-20T02:55:49.123 に答える