1. ホーム
  2. アイオス

[解決済み】Objective-C ARC: strong vs retainとweak vs assign

2022-03-25 08:50:32

質問

ARCによって導入されたプロパティの新しいメモリ管理属性は2つあります。 strongweak .

とは別に copy というのは、明らかに全く違うものです。 とは何か違いがあるのでしょうか? strongretainweakassign ?

私の理解では、ここでの唯一の相違点は weak が割り当てられます。 nil をポインタに設定し、一方 assign ということは、一度解放したポインタにメッセージを送るとプログラムがクラッシュしてしまうということです。しかし、もし私が weak にメッセージを送るので、このようなことは起こりません。 nil は何もしない。

との違いについてはわかりません。 strongretain .

を使用しなければならない理由はありますか? assignretain それとも、非推奨になるのでしょうか?

解決方法は?

からの ARCリリースノートへの移行について (プロパティ属性のセクションの例)。

// The following declaration is a synonym for: @property(retain) MyClass *myObject;

@property(strong) MyClass *myObject;

だから strong と同じです。 retain をプロパティ宣言で使用します。

ARCのプロジェクトでは、私は strong の代わりに retain を使用します。 assign をC言語のプリミティブプロパティに、そして weak Objective-Cのオブジェクトへの弱い参照用です。