2

ARC の時代に Property vs. ivar を読んだことから、プロパティの自動合成された関連インスタンス変数__strongを直接取得または設定するときに ARC が所有権修飾子を使用するが、strongカスタムゲッターまたはセッターを呼び出したり、KVO をトリガーしたりしないことを理解しています。

しかし、次のようにプロパティを宣言するとweak:

@property (weak, nonatomic) id <XYZExampleViewDelegate> delegate;
  1. 自動合成された関連付けられたインスタンス変数は、__weak所有権修飾子を取得しますか?

    たとえば、私の実装ではwill _delegate = delegate(vs )self.delegate = delegate

    - (id)initWithDelegate:(id <XYZExampleViewDelegate>)delegate
    

    __weak資格に応じて課題を実施しますか?

  2. で宣言されたプロパティはcopyどうですか?

4

1 に答える 1

4
  1. はい、プロパティ修飾子は所有権をweak意味し__weakます。プロパティの関連付けられたインスタンス変数 (またはバッキング ivar) は、プロパティの修飾子によって暗示された所有権修飾子を使用して作成されます。プロパティ修飾子のリストとそれらが意味する所有権修飾子については、ARC プロパティ宣言に関する Clang ドキュメントを参照してください。

  2. プロパティ修飾子は所有権をcopy意味__strongします。そのため、バッキング ivar を直接設定すると、新しいポインティは保持されますが、コピーされません。コピーするには、setter を使用します。

于 2013-10-26T21:36:52.463 に答える