2

私はさまざまなコントロールを持つフォームを持っています。これらのコントロールの1つを使用すると、コントロールをタップした後に表示されるモーダルビューを使用して、送信されるフォームのカテゴリを変更できます。ユーザーがフォームのカテゴリを変更するための選択を行うと、フォームは新しいカテゴリに基づいてコントロールを再表示する必要があります。ARC使用時のプロパティの再割り当て

フォームのビューから以前のコントロールを削除する以外に、破棄されているコントロールに関して心配する必要があるものはありますか?フォームが実装され、以下の方法を考えてみましょう:私は、このメソッドを複数回呼び出す場合(ユーザーがフォームのカテゴリを変更するため、前述のように、)

- (void)showControls 
    self.controls = [NSMutableArray array]; 

    for(UIControl *control in self.dataSource.controls){ 
     [self.controls addObject:control]; 
     [self.view addSubview:control]; 
    } 
} 

、私はそれが任意のポインタをせずに漂っ様々なNSMutableArraysになり前提としていますそれらを参照してください。これは大丈夫ですか?私はARCを使用しているので、自動的にそれらの "失われた"配列を収集しますか?

答えて

4

ARCは何も「収集」しません。また、あなたが行っていることは、ARCが使用されていることとはかなり関係がありません。 pre-ARCと同じように動作するcontrolプロパティのセッターを使用しています。それは古い値を解放し、新しい値を保持します。したがって、表示されているもの以外の奇妙なものをself.controlsで実行しない限り、配列が「失われている」という問題は発生しません。

+0

私は私のポストの最後にミスを犯しました。 「収集する」とは、ガベージコレクタを参照することを意味しました。もし私がセッターから 'controls'にアクセスせず、プロパティに直接代入しただけでは(つまり' controls = [NSMutableArray array] ')?それは間違いなくARCのないメモリリークを引き起こしますが、それについてはどうですか? – maxedison

+0

ARCにガベージコレクタはありません - 残念ながら、私はあなたがまだ収集していることを意味するものではありません。しかし、あなたが言うことは、ARCなしで直接ivarにアクセスすると、本当に漏れているか、正しく保持されていない可能性がありますが、ARCでは起こりません。 – mattjgalloway

+0

申し訳ありませんが私の専門用語はオフです。私は実際には、ARCと直接割り当てを使用するときに、これらのオブジェクトが正しくリリースされるかどうかを確認しようとしています。その質問に答えました。ありがとう! – maxedison

関連する問題