2011-11-02 2 views
17
  1. :私はそれを設定していた場合ARCで強力なプロパティにself.iVarが必要ですか?私はそうのような、強力なプロパティを宣言した場合

    @property (strong, nonatomic) UIView *iVar; 
    

    私はiVar = ...self.iVar = ...をすれば、それは問題ではありませんか? ARCでは、同じことをするようです。私は唯一のインスタンス変数(ない@property)を宣言した場合

  2. 、例えば、BOOL selectedは、それは(それが強いと指定なしプロパティがありませんので)__unsafe_unretainedと推定だどういう意味か、私は明示的に指定する必要がありますか?

私はARC: How to release static variable?に答えるには上記の私自身の質問に答えたかもしれないようだが、私は上記の質問にはまだ少し混乱しています。 ivar = ...またはself.property = ...(注:self.ivarとしてなものはありません)を使用して、メモリ管理の観点から

答えて

20

は、同じです。ただし、ivar = ...を使用すると、self.property = ...の場合はセッターが呼び出されません。プロパティはnonatomicをマークされていない場合は

  1. 、その後、基本となるIVARへのアクセスはロックがかかりませんし、あなたがアトミックへの影響を破壊されます。これは、特定の順序で3つの重要な波及効果を持っています。
  2. プロパティがオーバーライドされている場合は、オーバーライドされたセッターは呼び出されません。
  3. KVO通知は送信されません。

ivarを宣言するだけで、ローカル変数を宣言するのと同じメモリ管理セマンティクスを持ちます。これはsection 4.4 of the Objective-C Automatic Reference Counting文書に記載されていますが、基本的にはオブジェクトの場合はと推測されます。

+0

@kaka:いいえ簡単な例:ARC/MRRに関係なく、1つの単語より大きな構造体を割り当てることは、ほとんど確かに原子的ではありません。 –

関連する問題