2011-10-14 5 views
14

ARCがどのように動作するか少し混乱しますが、私は自動参照カウントがあることを知っていますが、この機能は生のインスタンス変数を割り当てる(プロパティを使用しない)場合でも機能します。例えばiOS 5インスタンス変数

、私はインスタンス変数arrを持っている場合:

@interface TestClass : NSObject { 
    NSArray *arr; 
} 

今使用して、私はこれを割り当てるメソッド内NSArray自動-放出された場合:この配列はどう

- (IBAction)test { 
    arr = [NSArray arrayWithObject:@"TEST"]; 
} 

を? arrが何かに再割り当てされるまで、それは魔法のように保つだけですか?それは強力な対が弱い場合はどうなり

self.arr = [NSArray arrayWithObject:@"TEST"]; 

は今、私のような何かをする場合は?

+3

Appleの「ARCリリースノートへの移行」のドキュメントを読むことをお勧めします。 – ditkin

+0

便宜上:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html –

答えて

18

はい、ARCは生のivarアクセス​​で動作します。ローカル変数と同様に、__weakまたは__unsafe_unretainedで装飾されていない限り、ivarsは暗黙的に__strongです。したがって、デフォルトでは、strong(またはretain、ARCではstrongの同義語です)とマークされたプロパティのように動作します。

+0

ケビン、 'copy'セマンティクスを持つ' @ synthesize'dプロパティはどうなりますか?合成されたivarに直接アクセスします。コンパイラは 'copy'を挿入しますか? –

+0

@StevenKramer:いいえ。ivarsに直接アクセスする*常に*プロパティのメモリ管理のセマンティクスを無視します。それが重要なのは、合成されたivarが合成されているプロパティの弱い/強いセマンティクスを拾うということだけです。 –

+0

Kevinに感謝します。デバッガでこれを確認しただけです。少し奇妙だが、わかりやすい選択だと思う。 –

関連する問題