- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下场景:您有一个代表某种数据提供者的单例类。这个单例类分配了大量内存,你希望它在没有人使用他时释放它分配的内存。流程:
您如何建议实现在第 3 阶段(A 类和 B 类“死亡”)将释放内存的单例(我知道 java 使用垃圾收集但仍然可以说我想要以下内存 = null)。
附言我不想强制每个使用单例调用的类在它停止使用时在单例上释放它。我希望单例自己处理“释放”内存。
最佳答案
你能做的是
WeakReference
中。如果它在其他地方仍然有“强”引用,它只会在 GC 之后保持 Activity 状态。如果 WeakReference.get()
是 null
这意味着它被收集是因为没有人强烈使用它,另一个弱引用不算数。如果再次需要它,您需要重新创建它和 WeakReference
。
像这样,
public enum SingletonHolder{; // no instances
private static WeakReference<MyType> ref = null;
public static synchronized MyType getInstance() {
MyType type = ref == null ? null : ref.get();
if (type == null)
ref = new WeakReference<MyType>(type = new MyType());
return type;
}
}
顺便说一句,这假设需要这个实例的实例保留了对它的引用。这就是弱引用“知道”仍然需要它的方式。
顺便说一句,如果它是单线程的,则不需要同步,但它应该是无害的。
这意味着您应该仅在新实例第一次需要它时调用此方法,而不是每次都调用它,并且使其性能更高应该不会有太大区别,例如仔细检查只会使事情复杂化。
关于java - 自释放(引用计数)单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20676694/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!