問題タブ [weak]
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.
objective-c - ARC IBOutlet ストレージ タイプ iOS の制限
Xcode では ARC の使用が推奨されていることは認識していますが、少なくとも__weak
. を作成すると、ストレージ タイプとして弱いか強いIBOutlet
かを選択できますが、これはアプリケーションが iOS 5 以降に限定されているということですか、それとも古い iOS でも動作するのでしょうか?
java - SoftReferencesとWeakreferences/OutOfMemoryError
ソフト参照と弱参照の処理で問題が発生しました。コードには、すべてのロジックをソフト参照と弱参照の間で切り替えるフラグがあります。弱い参照ではすべて正常に機能しているように見えますが、ソフト参照では一貫してOutOfMemoryErrorが発生します。これは、MacOSXのJDK7とJDK6、およびDebianのIcedTea6で発生します。ただし、G1コレクターを備えたJDK7は、ソフト参照で動作していることがわかったセットアップであり、他のすべて(シリアル/パラレルGC、-client / -serverなど)は例外をスローできませんでした。
コードは少し大きいですが、問題を残しながら可能な限り絞り込むようにしています。
その上に、問題を再現する方法をより詳細に説明する大規模なコメントを残しました。
ios - カスタム デリゲートの問題
カスタムデリゲートとプロトコル機能を使用しています。
次のようにクラスを実装しました。
私の実装クラスは次のようになります。
そして別のクラスから私はそれを次のように設定しています:
しかし、updateRequired
がトリガーされると、 として表示されnil
ます。
次に、次のようなセッターメソッドを追加しました。
すべて正常に動作します!!!
次に、updateRequired
メソッドを(カスタムセッターなしで)次のように変更しました。
こちらも元気に動いています!!!
最初のケースで機能しない理由と、他の 2 つのケースで機能する理由がわかりませんでした。
問題を見つけるのを手伝ってください、事前に感謝します
ios - ios __weak および __autoreleasing
このスレッドへの回答を読んだ後、いくつか質問がありました ARCでのポインターツーポインター所有権の問題の処理;
デモ 1 では、'strong' 属性付き変数への参照が渡されると、hidden(__autoreleasing) 変数が暗黙的に作成され、オブジェクトは保持されません。ただし、デモ 4 では、「弱い」属性付き変数への参照が渡されると、オブジェクトは 1 回保持されます。
だから私の質問は私の好奇心として非常に単純です.なぜ '__weak' から作成された隠し変数だけがオブジェクトを保持するのですか? このパターンは特別な懸念のために設計されていますか?
質問を明確に説明していただければ幸いです。
c - リンク時にライブラリ間で弱いシンボルを解決できますか?
私のシナリオは Arduino Due (ARM ターゲット) へのクロスコンパイルに関するものですが、これは一般的な C の弱いシンボルの問題だと思います。
ファームウェアを 3 つの部分に分けたい: 1. ハードウェア ライブラリ (CMSIS、ミドルウェア) -> libHardware.a 2. リアルタイム OS ライブラリ -> libOS.a 3. アプリケーション コード -> 上記にリンクされている Output.elf
参照されている CMSIS 実装では、次のことが宣言されています。
CMSIS 設計の考え方は、IRQ の一部を選択的に実装および処理するアプリケーション コードを持たせることです。
libHardware.a の nm レポート
私のシナリオでは、これらの IRQ ハンドラーを libOS.a に実装したいと考えています。
void SysTick_Handler(void) を実装し、nm レポート:
次に、それらをリンクします。これは基本的に次のようになります。
(OS は低レベルのハードウェア関数に依存するため、グループ化が必要です。ハードウェアは、OS によって提供される IRQ/main() 関数を呼び出す必要があります)
nm レポート:
まだまだ弱い!libOS.a で定義されているストロング シンボルを使用していると思われます。最後に、SysTick は処理されず、もちろん壊滅的な障害につながります。
一方、libHardware/startup_sam3xa.c で弱いと宣言しなければ、すべて正常に動作します。app/app.c に SysTick_Handler を実装することを選択した場合、それも強くリンクされます。
私の質問は、libHardware.a で定義された弱いハンドラーを libOS.a がどのように実装できるかということです。または、これらのファームウェア開発シナリオでのベスト プラクティスは何でしょうか?
uitableview - Xamarin UITableView ソースは弱いですか、強いですか?
これにより、Xamarin でメモリ リークが発生する可能性がありますC#
か? つまり、MyViewController を解放できますか、それとも循環参照があり、それを防いでいますか?
MyViewController で:
によると:
変数でそれ自体を参照するネストされたクラスをインスタンス化する場合、UITableViewController ガベージ コレクションは行われますか? 問題ありません。しかし、ソースが弱い場合、次のものがあるとどうなりますか:
ソースは次の行から解放できますか? いずれにせよ、これは非常に危険な API のようです。
entity - この ER 図の弱いエンティティは何ですか?
http://i.stack.imgur.com/3wdI0.png
上記のリンクを参照してください。「billing_info」は「注文」に完全に依存しているため、弱いエンティティですか? もしそうなら、「bill_id」はディスクリミネーターですか?
c - MinGW GCC / C 代替用の .weak アセンブラ マクロ
いくつかの条件が満たされた場合にのみリリースにリンクされる、いくつかの異なるライブラリ/オブジェクトを含むモジュラー C プロジェクトがあります。このプロジェクトは PowerPC 用の GCC 3.4.4 でビルドされています。
したがって、私のプロジェクト全体に、他のモジュールの関数を使用する C ファイルがいくつかあります (これらのモジュールは必ずしもビルドに追加されるわけではありません)。したがって、これらの関数は extern として宣言されます。
リリースに応じて、関数自体を含むモジュールがリンクされているかどうかが異なります。未定義の参照を避けるために、これらの関数はアセンブラ マクロで弱いものとして宣言されます。
私はこれを例で示しようとしています:
ModuleA.c (コアモジュール)
ModuleB.c (オプションモジュール)
ModuleB は常に ModuleA にリンクされているわけではなく、一部の特定のリリース ビルドでのみリンクされています。したがって、3 番目の C ファイルがあります。
weakfuncs.c (コアモジュール)
このマクロを使用すると、プロジェクトは常にビルドされます (ModuleB がリンクされている場合は ModuleB から呼び出され、ModuleB がリンクbar()
されていない場合は.bar()
empty_function()
プロジェクト全体にこれらのケースがたくさんあるので、私の前任者はこれらすべての機能を に集めていましたweakfuncs.c
。
これまでのところ、これは私が再利用しているレガシーコードでした
ここで、MinGW (GCC 4.8.1) を使用して Windows 用にすべてをコンパイルしたいと思います。私の問題は、コンパイラがアセンブラ ディレクティブに問題があるように見えることです。
まったく機能していません (彼はコマンドを知りblr
ません) が、次のように C で空の関数を実装できるため、これは問題ではありません。
WEAK マクロ自体
問題なくコンパイルされますが、効果はありません。つまり、リンクされていない関数は、WEAKマクロを実行したとしても、「未定義の参照」を引き起こします。
これで、関数に次のように属性 weak を与える方法が gcc にあることがわかりました。
これは実際には機能しますが、適応が必要な関数がたくさんあるのでweakfuncs.c
、マクロを使用してそれを行うことをお勧めします。
プレース全体ですべての関数宣言を変更せずに、アセンブラー ディレクティブまたは C でそうする方法はありますか?
java - JIT 最適化と弱参照
次のコードがあります。
メソッドは、 の弱い参照によって参照される のunwrap()
リストを作成するだけで
、副作用として の弱い参照を参照しなくなります。次に、の各メンバーがsomeを参照することに依存する種類があります。それ以外の場合、コードは を生成します。T
slaves
null
slaves
slaves
T
NullPointerException
unwrapped
は各T
inの参照を保持するためslaves
、並べ替え中に GC によって a が削除されることはありませんT
。最後に、unwrapped = null
ラップされていない参照を削除して、GC を再び解放します。かなりうまくいくようです。
今私の質問:
これを削除すると、負荷がかかった状態で多くのテストを実行したときに発生しますunwrapped = null;
。NullPointerExceptions
私は、JIT が排除されていると思われるため、ソート中にList<T> unwrapped = unwrap();
GC がスレーブ内の に適用されます。T
別の説明はありますか?私に同意する場合、これは JIT のバグですか?
unwrapped = null
個人的には必要ないと思いunwrapped
ますupdateOrdering()
。何が最適化され、何が最適化されないかという仕様はありますか?
それとも私は間違った方法で物事をしましたか?で弱い参照を許可するようにコンパレータを変更するという考えがありますnull
。あれについてどう思う?
提案をありがとう。
アドオン (1)
ここで、不足している情報をいくつか追加したいと思います: まず、Java バージョン: Java バージョン "1.7.0_45" OpenJDK ランタイム環境 (IcedTea 2.4.3) (suse-8.28.3-x86_64) OpenJDK 64 ビット サーバー VM (ビルド) 24.45-b08、混合モード)
次に、誰かがメソッドのアンラップを見たいと思った
反復中に、無効な参照が削除されることに注意してください。実際、私はこの方法を
私自身のイテレータを使用していますが、機能的にはこれは同じはずです。
次に、誰かがスタックトレースを欲しがります。これがその一部です。
これは、リターンのある行であるコンパレーターを指しています。
そして最後に、
重要な定数です。
アドオン (2)
updateOrdering() に「unwrapped = null」が存在する場合でも、実際に NPE が発生することが確認されました。
jit の最適化後に厳密な参照が保持されない場合、Java ランタイムによって弱い参照が削除されることがあります。ソースコードはまったく重要ではないようです。
次の方法で問題を解決しました。
スレーブがガベージ コレクションされるのを防ぐために装飾を挿入せず、CMP_IDX_SLV のコンパレータを有効にして null への弱い参照を処理します。
副作用として、基になるリスト List> slaves; を並べ替えます。無効な弱参照をリストの最後に置き、後で収集できるようにします。