Questions tagged «weak-references»

弱引用是不主张所有权的引用。弱引用会在内存中保留有关对象的引用,但是当不再需要引用的对象时,它不会阻止内存管理系统回收关联的内存。许多语言都具有或支持各种级别的弱引用,例如Swift,Objective-C,Java,C#,Python,Perl和Lisp。


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); } 流程操作 -(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{ if(self =[super init]){ dataArr = [NSMutableArray arrayWithArray:data]; …







4
了解Java的参考类:SoftReference,WeakReference和PhantomReference
有人可以解释这三个Reference类之间的区别吗(或发布一个很好的解释的链接)?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修饰符都应用于变量,则该块将无法确保其保持活动状态。 所以,我完全不解。



3
参考利益薄弱
有人可以解释C#中不同类型的引用的主要好处吗? 参考文献薄弱 软参考 幻影参考 有力的参考。 我们有一个消耗大量内存的应用程序,我们正在尝试确定这是否是一个需要重点关注的领域。

12
作为弱引用的侦听器的优缺点
将侦听器保留为WeakReferences的利弊是什么? 当然,最大的“专业版”是: 将侦听器添加为WeakReference意味着侦听器无需费心“删除”自身。 更新资料 对于那些担心侦听器仅引用对象的人,为什么不能有2个方法addListener()和addWeakRefListener()? 那些不关心删除的人可以使用后者。

4
Java的WeakHashMap和缓存:为什么引用键而不是值?
Java的WeakHashMap通常被认为对缓存有用。尽管其弱引用是根据地图的键而不是其值定义的,但这似乎很奇怪。我的意思是,这是我要缓存的值,而一旦缓存中没有其他人强烈引用它们,我想获取垃圾回收值,不是吗? 以哪种方式保留对键的弱引用?如果执行a ExpensiveObject o = weakHashMap.get("some_key"),那么我希望高速缓存保持在'o'状态,直到调用者不再拥有强引用为止,并且我根本不在乎字符串对象“ some_key”。 我想念什么吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.