1. ホーム
  2. オブジェクティブC

[解決済み】Objective-Cのstrongとweakの違い。

2022-04-18 23:08:24

質問

Obj-Cは初めてなので、最初の質問です。

とはどのような違いがあるのでしょうか? strongweak@property オブジェクトへのポインタの宣言?

また nonatomic の意味は?

どのように解決するのですか?

強い参照(ほとんどの場合、これを使用します)は、このプロパティ/変数で参照しているオブジェクトを所有したいことを意味します。コンパイラは、このプロパティに代入したオブジェクトが、強い参照で指している限り、破壊されないように配慮してくれます。一度だけ、このプロパティを nil を指定すると、そのオブジェクトは破壊されます (他のオブジェクトがそのオブジェクトへの強い参照を保持していない限り)。

これに対して、弱参照では、オブジェクトの寿命をコントロールしたくないということを意味します。弱く参照しているオブジェクトは、少なくとも一つの他のオブジェクトが強い参照を保持しているからこそ、生き続けることができるのです。そうでなくなった時点でそのオブジェクトは破棄され、 あなたの weak プロパティは自動的に nil . iOSにおける弱参照の最も頻繁な使用例は以下の通りです。

  1. デリゲートプロパティは、retain cyclesを避けるために弱く参照されることがよくあります。

  2. ビューコントローラのメインビューのサブビューやコントロールは、 すでにメインビューによって強く保持されているからです。

atomicとnonatomicは、コンパイラがプロパティ用に合成するゲッターとセッターのメソッドのスレッドセーフを指します。atomic(デフォルト)はコンパイラにアクセッサメソッドをスレッドセーフにするよう指示し(ivarがアクセスされる前にロックを追加する)、nonatomicはその逆を行います。非アトミックの利点は、パフォーマンスが若干高くなることです。iOSでは、Appleはほとんどすべてのプロパティにnonatomicを使用しているので、一般的なアドバイスとして、あなたも同じようにすることをお勧めします。