Tag: 弱引用

弱引用和无主引用之间有什么区别?

Swift有: 强烈的参考 弱引用 无主的参考 一个无主的参考与一个弱参考有什么不同? 何时可以安全地使用无主引用? 在C / C ++中,无主引用是否存在像悬挂指针这样的安全风险?

Java中的SoftReference和WeakReference有什么区别?

有什么不同?

C#中事件如何导致内存泄漏,弱引用如何帮助缓解这种情况?

有两种方式(我知道)在C#中导致无意的内存泄漏: 不处理实施IDisposable的资源 错误地引用和解引用事件。 我真的不明白第二点。 如果源对象比侦听器的生命周期更长,并且在没有其他引用的情况下侦听器不再需要事件,则使用正常的.NET事件将导致内存泄漏:源对象将侦听器对象保存在内存中应该被垃圾收集。 你能解释一下事件如何导致C#代码中的内存泄漏,以及如何使用弱引用来解决这个问题,而且没有弱引用?

Bitmap,Bitmap.recycle(),WeakReferences和垃圾收集

Android上的AFAIK,build议引用Bitmap对象作为WeakReferences,以避免内存泄漏。 当没有更多的硬引用保留位图对象时,垃圾收集器将自动收集它。 现在,如果我理解正确,必须始终调用方法Bitmap.recycle()来释放一个位图。 我认为这是因为Bitmap对象有特殊的内存pipe理。 那是对的吗? 如果这是真的,那么在使用WeakReferences时,必须存在内存泄漏,因为在释放WeakReferences时,Bitmap.recycle()永远不会被调用。 或者,不知何故,WeakReferences足以避免内存泄漏? 谢谢

如何在Java和Android开发中使用WeakReference?

我一直是一个Java开发人员2年。 但是我从来没有在我的代码中写过WeakReference。 如何使用WeakReference使我的应用程序更高效,尤其是Android应用程序?

弱NSStringvariables不是零后设置唯一强引用为零

我有这个代码的问题: __strong NSString *yourString = @"Your String"; __weak NSString *myString = yourString; yourString = nil; __unsafe_unretained NSString *theirString = myString; NSLog(@"%p %@", yourString, yourString); NSLog(@"%p %@", myString, myString); NSLog(@"%p %@", theirString, theirString); 我期待所有的指针在这个时候是nil ,但他们不是,我不明白为什么。 第一个(强)指针是nil但其他两个不是。 这是为什么?

为什么强壮的人走后,我的弱言辞就没有被清除?

我有点固执,但是我想很好地理解弱和强的引用,所以我再次问你。 考虑这个: __weak NSString* mySecondPointer = myText; NSLog(@"myText: %@", myText); 结果是myText: (null) ,它非常明显 – 弱赋值在赋值后被设置为null,因为没有强引用指向的对象。 但在这种情况下: __strong NSString* strongPtr = [[NSString alloc] initWithFormat:@"mYTeSTteXt %d"]; // weak pointer points to the same object as strongPtr __weak NSString* weakPtr = strongPtr; if(strongPtr == weakPtr) NSLog(@"They are pointing to the same obj"); NSLog(@"StrongPtr: %@", strongPtr); NSLog(@"weakPtr: %@", weakPtr); […]

你什么时候使用WeakHashMap或者WeakReference?

弱引用的使用是我从来没有见过的实现,所以我想弄清楚它们的用例是什么,以及如何实现工作。 何时需要使用WeakHashMap或WeakReference ,它是如何使用的?

在ARC中总是把自己的弱引用变成块?

我对Objective-C中的块使用有点困惑。 我目前使用ARC,在我的应用程序中有相当多的块,目前总是指self而不是它的弱引用。 这可能是这些块保持self ,防止交易的原因吗? 问题是,我应该总是在一个块中使用一个self的weak引用? -(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]; rowHeightsArr […]