1. ホーム
  2. objective-c

[解決済み] デリゲートプロパティ宣言におけるweakとassignの違いとは?

2023-04-05 11:57:24

質問

この違いは何ですか?

@property (nonatomic, weak) id  <SubClassDelegate> delegate; 

とこれを

@property (nonatomic, assign) id  <SubClassDelegate> delegate; 

デリゲート用のプロパティを使いたい。

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

唯一の違いは weakassign は、もしオブジェクトが weak プロパティが指すオブジェクトが割り当て解除されると weak ポインタの値は nil に設定され、ゴミにアクセスする危険はありません。もし assign を使用する場合、そのようなことは起こらないので、オブジェクトがあなたの下から割り当て解除され、それにアクセスしようとすると、ガベージにアクセスすることになります。

Objective-Cのオブジェクトの場合、もしあなたが weak を使える環境であれば、それを使うべきでしょう。