問題タブ [strong-references]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iOSインターフェイス要素を使用した強力な修飾子と弱い修飾子
私のプロジェクトでは、Interface Builderを使用していませんが、説明の仕方がわからないことに気づきました。まだ。だから、要点まで。IBを使用していて、コントローラーでUILabelやUIButtonなどのユーザーインターフェイスの要素を定義している場合は、この醜いプレフィックスIBOutletと「weak」修飾子を使用します。これは音楽のように機能します。しかし、IBを使用せず、コードからユーザーインターフェイス全体を定義することにした場合、それは機能しません。
UILabelをコントローラーに追加したいとします(IBを使用)。私はこのi*.hファイルのようなものを持っています:
そして、*。mファイルでこれ以上何もする必要はありません。しかし、*。xibファイルを削除して、たとえば次のようなinitメソッドの1つでUILabelを設定しようとすると、次のようになります。
*.hファイルを次のように変更するまで機能しません。
これで、weakとstrongの違いはわかりましたが、IBを使用するときにUI要素にweakを使用できる理由がわかりません。何かがこれらの要素への強力なポインタを維持する必要がありますよね?でもなに?2番目のケースではコントローラーですが、最初のケースでどのように動作するかわかりません。
objective-c - 強い参照がなくなった直後に弱い参照がクリアされないのはなぜですか?
少し頑固なところもありますが、弱い参照と強い参照をよく理解したいので、もう一度お願いします。
このことを考慮:
結果はmyText: (null)
非常に明白です-弱い参照は割り当ての直後にnullに設定されます。これは、指定されたオブジェクトへの強い参照がないためです。
しかし、この場合:
出力:
私の質問:
弱いポインターの値が nil に変更されないのはなぜですかstrongPtr = [[NSString alloc] initWithString:@"abc"];
(最初に作成されたオブジェクトは、強い参照がないにもかかわらず、メモリ内にまだ存在するのはなぜですか? -- または、存在する可能性がありますか?)
私はそれを試しました:(しかし、コメントを追加するには適していないと思います)。@autorealesepool で strongPtr を作成するコードを含めました。それが正しい解決策かどうかはわかりませんが、うまくいきます...
出力:
automatic-ref-counting - __autoreleasing + __strong を使用するとアプリがクラッシュするのはなぜですか?
これが私のコードです:
痕跡 (申し訳ありませんが、コピーして貼り付けることはできません):
質問は次のとおりです。何が起こっているのですか?
このコードで何が起こっているかについての詳細が必要です。本当に興味深い...楽器には漏れやゾンビなどは見られません。
automatic-ref-counting - 強いアークから強いアークへ
ここARCの下での正しいアプローチを知りたいです。
コントローラー内に強力な NSArray (独自のカスタム クラス オブジェクト) @property があり、別のコントローラーを初期化するときに、これらの配列から弱い別のコントローラーのポインターに NSString を 1 つだけ渡す必要があります。しかし、これをソートする必要があるため、これは好きではありません
メインコントローラーで
そして、もう一方のコントローラーには
1)私が理解したように、最初は別のウィークポインターに割り当てるウィークポインターを返すので、mainController のコードが範囲外になると、reportLabel は「nil」になりますか?
2) reportLabels プロパティ (strong) を作成すると、問題は解決しますが、他のアプローチはありますか? 最後にこの「コピー」のようなこともするべきですか?
objective-c - ARCに保持されているUIViewController
UIViewController のサブクラスがあります - > MyPopUpViewController
この MyPopUpViewController をインスタンス変数として持つことはできません。これは外部から取得されるためであり、これらのポップアップが多数存在する可能性があります。これまでのところ、これを試してみましたが、保持されていないためにデリゲート呼び出しでクラッシュします:
MyMainViewController:
ポップアップが表示され、[OK] ボタンがタップされると、クラッシュし、その NSLog に到達しません。どうすれば変更できますか
MyPopUpViewController *popupView = [[MyPopUpViewController alloc] init];
..インスタンス変数にせずに保持しますか?
前もって感謝します。