2012-01-17 3 views
5

のは、私はそうのような強い性質を持っているとしましょうARCを使用しているときに、自動解放イニシャライザの結果にプロパティを割り当てることは安全ですか?</p> <pre><code>@interface Foo @property (strong, nonatomic) NSArray *myArray; @end </code></pre> <p>そして、私の初期化子で、私はそうのようなmyarrayの設定:

myArray = [NSArray array]; 

は、この安全ですか? ARCは私のためにmyArrayを適切に保持してくれますか?

私が尋ねる理由は、このシナリオではが適切に保持されていないmyArray のプロジェクトがあり、道路に悪いメモリアクセスが発生することです。

しかし、私は

myArray = [[NSArray alloc] init]; 

を使用する場合、すべてが順調です。

+0

"私の初期設定で"あなたのクラスの 'init [With ...]'メソッドが正しいことを意味しますか? –

+1

あなたはあなたの課題でプロパティを使用していません。あなたは裏地のivarに直接割り当てています(これはイニシャライザで正しいです)。しかし、それは重要ではありません、ARCはどちらかの方法でこの配列を保持します。 (背中のivar自体も__strongでなければならないので) –

答えて

7

はい、ARCによって自動的に保持されます。

ARCを考える方法は次のとおりです。オブジェクトへの強いポインタがあれば、それは生き続けることが保証されます。オブジェクトへのすべてのポインタ(すべて強いポインタ)がなくなると、オブジェクトは死ぬでしょう。

問題の説明から、そのコードを実行しているファイルでARCが適切に有効になっていないようです。それにかかわらず、私は "ゾンビ"テンプレートを使用して、Instrumentsでアプリケーションを実行することをお勧めします。そのオブジェクトの完全な保持/解放の履歴を見ることができます。そして、あなたは物事がうまくいかないことを知ることができるはずです。

+0

私はそれを有効にしています。おそらく私のクラスには何かがありません。 – jimothy

+0

Instrumentsの "ゾンビ"テンプレートについて私の答えを更新しました。それは私が次に行くところです。 –

関連する問題

 関連する問題