1

(^.^)「こんにちは、私の英語が下手で申し訳ありませんが、編集を訂正していただけると幸いです」

はい、あなたが正しい。しかし:最初に作成ボタンをクリックすると、これはallocで新しいビューコントローラーを作成し、カウント+1を自動的に保持し、キルボタンを押すと保持カウント-1および0に等しいこれは、理論的に作成されたビューコントローラーがから削除されたことを意味しますメモリ私はコードを修正しました:

- (IBAction)create:(id)sender{
    if(vc == nil){ //if is not nil this mean vc have some space of memory reference and vc is not created
    //if == nil this mean vc does not have space of memory reference so create.
    vc = [[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]];// retain count + 1
    [_VW addSubview:vc.view];
}

  - (IBAction)kill:(id)sender{
    [vc.view removeFromSuperview]; //When view removeFromSuperview is called also dealloc is called of the vc view
    [vc release];// retain count - 1  the curren count is equal 0 this mean vc does not have space of memory
     vc = nil; // remove the reference of memory.
  }

*しかし、プロジェクトのプロファイルを作成し、ボタンをクリックして作成して削除すると、メモリは減少せず、増加するだけです*

申し訳ありませんが、私は初心者の投稿であるため、画像を貼り付けることができませんが、割り当てでプロファイルを初期化すると、Live Bytes 584,19kb で初期化され、1 分で Live Bytes は 1,08 MB になり、何も解放されず、成長するだけです。

正しく作成して解放した場合、助けてください。

4

1 に答える 1

1

次の 2 つの方法を使用できます - 1. 一度割り当てて、dealloc で解放 -

- (IBAction)create:(id)sender{
    if(vc == nil){ 
        vc = [[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]];
        [_VW addSubview:vc.view];
    }
}

- (IBAction)kill:(id)sender{
    [vc.view removeFromSuperview]; 
}

- (void)dealloc {
    [vc release];

    [super dealloc];
}

2. 毎回割り当てて解放も -

- (IBAction)create:(id)sender{
    if(vc == nil){ 
        vc = [[[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]] autorealease];
        [_VW addSubview:vc.view];
    }
}

- (IBAction)kill:(id)sender{
    [vc.view removeFromSuperview]; 
}

これで、これらのいずれかを試してから、メモリ フットプリントを確認できます。

于 2012-04-14T05:34:02.200 に答える