私はObj-Cを初めて使用するので、最初の質問は次のとおりです。
オブジェクトへのポインタの宣言とstrong
の違いは何ですか?weak
@property
また、どういうnonatomic
意味ですか?
私はObj-Cを初めて使用するので、最初の質問は次のとおりです。
オブジェクトへのポインタの宣言とstrong
の違いは何ですか?weak
@property
また、どういうnonatomic
意味ですか?
バルーンの観点から強参照と弱参照について考えると役立つ場合があります。
気球は、紐につながれた人が一人でもいる限り、飛び散ることはありません。文字列を保持している人数が保持数です。誰も糸を握っていないとき、風船は飛び去ります (dealloc)。多くの人が同じバルーンに紐を付けることができます。強参照と弱参照の両方を使用して、参照先オブジェクトのプロパティを取得/設定し、メソッドを呼び出すことができます。
強い参照とは、その風船への紐にしがみつくようなものです。風船に付いている紐を握っている限り、風船は飛びません。
弱参照は、風船を見るようなものです。表示、プロパティへのアクセス、メソッドの呼び出しはできますが、そのバルーンへの文字列はありません。紐を持っている全員が手を放すと、風船が飛んでしまい、もうアクセスできなくなります。
強い参照 (ほとんどの場合に使用します) は、このプロパティ/変数で参照しているオブジェクトを「所有」したいことを意味します。コンパイラは、強い参照でオブジェクトを指している限り、このプロパティに割り当てたオブジェクトが破棄されないように注意します。プロパティを に設定するnil
と、オブジェクトが破棄されます (1 つ以上の他のオブジェクトもそれへの強い参照を保持していない限り)。
対照的に、弱い参照を使用すると、オブジェクトの有効期間を制御したくないことを意味します。弱参照しているオブジェクトは、少なくとも 1 つの他のオブジェクトが強参照を保持しているため、存続します。それがなくなると、オブジェクトは破棄され、weak プロパティは自動的に に設定されnil
ます。iOS での弱参照の最も頻繁な使用例は次のとおりです。
保持サイクルを避けるために弱く参照されるデリゲート プロパティ、および
これらのビューはすでにメイン ビューによって強力に保持されているため、ビュー コントローラーのメイン ビューのサブビュー/コントロール。
アトミックと非アトミックは、コンパイラがプロパティ用に合成するゲッター メソッドとセッター メソッドのスレッド セーフを指します。atomic (デフォルト) は、(ivar がアクセスされる前にロックを追加することによって) アクセサ メソッドをスレッドセーフにするようにコンパイラに指示し、nonatomic はその逆を行います。ノンアトミックの利点は、パフォーマンスがわずかに高いことです。iOS では、Apple はほとんどすべてのプロパティに非アトミックを使用しているため、一般的なアドバイスは、同じことを行うことです。
strong:入力値を割り当てます。入力値を保持し、インスタンス変数の既存の値を解放します。
weak:入力値を保持せずに割り当てます。
したがって、基本的な違いは、新しい変数を保持することです。通常は保持したいのですが、保持したくない場合もあります。そうしないと、保持サイクルが発生し、オブジェクトのメモリを解放できなくなります。例えば。obj1はobj2を保持し、obj2はobj1を保持します。この種の状況を解決するには、弱参照を使用します。
ダミーの答え:-
説明は上記の回答に記載されていると思いますので、どこで使用するかSTRONG
、どこで使用するかを説明しますWEAK
:
の使用Weak
:-
1. デリゲート 2. アウトレット 3. サブビュー 4. コントロールなど
の使用Strong
:-
に含まれていないすべての場所に残っていWEAK
ます。
strongとweak、これらのキーワードは、Objective-C のオブジェクト所有権を中心に展開します
オブジェクトの所有権とは何ですか?
ポインター変数は、それらが指すオブジェクトの所有権を意味します。
ポインター変数がオブジェクトを指すときはいつでも、そのオブジェクトには所有者がいて、生き続けます。これは強い参照として知られています。
変数は、オプションで、それが指すオブジェクトの所有権を取得できません。オブジェクトの所有権を持たない変数は、弱参照と呼ばれます。
ここで詳細な説明をご覧くださいDemystifying @property and attributes
強いがデフォルトです。オブジェクトへの強力なポインタがある限り、オブジェクトは「生きている」ままです。
weakは、参照先のオブジェクトを存続させない参照を指定します。オブジェクトへの強い参照がない場合、弱い参照は nil に設定されます。