タグ付けされた質問 「weak-references」


6
常に自己の弱い参照をARCのブロックに渡しますか?
Objective-Cでのブロックの使用について少し混乱しています。私は現在ARCを使用しており、アプリには非常に多くのブロックがあり、現在は常にself弱い参照ではなく参照しています。これが、これらのブロックselfが割り当て解除されないように保持および保持する原因となる可能性がありますか?問題は、ブロック内のweak参照を常に使用する必要selfがあるかどうかです。 -(void)handleNewerData:(NSArray *)arr { ProcessOperation *operation = [[ProcessOperation alloc] initWithDataToProcess:arr completion:^(NSMutableArray *rows) { dispatch_async(dispatch_get_main_queue(), ^{ [self updateFeed:arr rows:rows]; }); }]; [dataProcessQueue addOperation:operation]; } ProcessOperation.h @interface ProcessOperation : NSOperation { NSMutableArray *dataArr; NSMutableArray *rowHeightsArr; void (^callback)(NSMutableArray *rows); } ProcessOperation.m -(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{ if(self =[super init]){ dataArr = [NSMutableArray arrayWithArray:data]; …

7
弱い参照と所有されていない参照の違いは何ですか?
スウィフトは: 強い参照 弱い参照 所有されていない参照 所有されていない参照と弱い参照との違いは何ですか? 所有されていない参照を使用しても安全ですか? 所有されていない参照は、C / C ++のダングリングポインターのようなセキュリティリスクですか?






4
Javaの参照クラスを理解する:SoftReference、WeakReference、およびPhantomReference
誰かが3つのリファレンスクラスの違いを説明できますか(または素敵な説明へのリンクを投稿できますか)?SoftReference> WeakReference>PhantomReferenceが、私は一つ一つを使用するとき?なぜあるのにWeakHashMapないのSoftHashMapかPhantomHashMap? そして、次のコードを使用すると... WeakReference<String> ref = new WeakReference<String>("Hello!"); if (ref != null) { // ref can get collected at any time... System.gc(); // Let's assume ref gets collected here. System.out.println(ref.get()); // Now what?! } ...何が起こるのですか?refすべてのステートメントの前にnullかどうかを確認する必要がありますか(これは間違っていますが、どうすればよいですか)?急いで質問して申し訳ありませんが、これらのReferenceクラスを理解するのに苦労しています...ありがとう!

4
__weak参照と__block参照の違いは何ですか?
Xcodeのドキュメントを読んでいますが、これが私を困惑させるものです。 __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; 以下はドキュメントからコピーされたものです。 ブロックは、キャプチャする変数への強力な参照を形成します。selfブロック内で使用する場合 、ブロックはへの強い参照を形成するため、ブロックへの強い参照もselfある場合 self(通常はそうなります)、強い参照サイクルが発生します。サイクルを回避する__blockには、上記の例のように、ブロックの外側に自分自身への弱い(または)参照を作成する必要があります。 「弱い(または__block)」の意味がわかりませんか? です __block typeof(self) tmpSelf = self; そして __weak typeof(self) tmpSelf = self; ここでもまったく同じですか? ドキュメントで別の部分を見つけました: 注:ガベージコレクション環境では、変数に__weakと__block修飾子の両方を適用すると 、ブロックはそれが存続することを保証しません。 だから、私は完全に困惑しています。

2
WeakHashMapを使用しているにもかかわらずOutOfMemoryException
を呼び出さない場合System.gc()、システムはOutOfMemoryExceptionをスローします。なぜSystem.gc()明示的に呼び出す必要があるのか​​わかりません。JVMはgc()それ自体を呼び出す必要がありますよね?お知らせ下さい。 以下は私のテストコードです: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } } 以下のように追加-XX:+PrintGCDetailsして、GC情報を印刷します。ご覧のとおり、実際には、JVMは完全なGC実行を試みますが失敗します。私はまだその理由を知りません。System.gc();行をコメント解除すると、結果がポジティブになるのは非常に奇妙です。 add new element …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.