OK - 初心者向けの Objective-C に関する質問:
プロパティを宣言する場合、次のような属性があります。
@property (weak, nonatomic)
私はそれを完全に理解するためにこれを読む必要があることを理解していますが、私が見つけたもののほとんどは参考資料でした. 、など)またはいくつかの例をいただければ幸いです。
ありがとう!
OK - 初心者向けの Objective-C に関する質問:
プロパティを宣言する場合、次のような属性があります。
@property (weak, nonatomic)
私はそれを完全に理解するためにこれを読む必要があることを理解していますが、私が見つけたもののほとんどは参考資料でした. 、など)またはいくつかの例をいただければ幸いです。
ありがとう!
私がこれについて行った最近のクラスから(Paul Hegartyに触発されて)
非アトミック-スレッドセーフではありません。上記のコメントでジャスティンが指摘したリンクを参照してください。
strong(または保持)-このオブジェクトをポイントしなくなるまで(nilに設定)、このオブジェクトを割り当てたままにします。コンパイラは、私がもう強く指されていない場合(私はdeallocされます)、これをヒープからスローします(割り当てを解除します)。
弱い-何かがまだ強く指している限り、このオブジェクトを割り当てたままにします。IBOutletsは、View Controllerによって自動的に保持されるため、通常は弱いと宣言されます。
プリミティブ型はヒープに割り当てられず、strongまたはweakを使用しません
原子性はスレッド化と関係があり、初心者にとってはかなり高度なトピックです。ただし、簡単に言えば、iOS プロパティは常に非アトミックとして宣言されます。これについての詳細な情報を次に示します。
weak/strong キーワードは、ARC によるメモリ管理と、いわゆる保持サイクルの防止に関係しています。これも初心者にとっては少し難しい概念になる可能性がありますが、大まかに言えば、2 つのオブジェクトが相互に強い参照を持っている場合に保持サイクルが発生し、どちらのオブジェクトも ARC によって破棄されないということです。これは、使用されなくなったオブジェクトがまだメモリを占有している可能性があるため、メモリ リークの一種です。プロパティを弱いと宣言することにより、何かがまだ強い参照を持っている限り、自動的に破棄されないようにします。たとえば、いくつかのオブジェクトを含む配列があるとします。2 つのオブジェクトは相互に強い参照を持っています。その後、配列は所有者を失い、破棄されます。しかし、その配列内の相互を指す 2 つのオブジェクトは、強い参照を持っているため、破棄されません。したがって、所有する配列が破棄されているためアクセスできない 2 つのオブジェクトがありますが、それらはまだメモリを占有しています。