引用一 此种情况是最常见的循环引用导致的内存泄露了,在这里,self强引用了teacher, teacher又强引用了一个block,而该block在回调时又调用了self,会导致该block又强引用了self,造成了一个保留环,最终导致self无法释放。 self -> teacher -> bl ...
分类:
其他好文 时间:
2018-03-04 19:56:32
阅读次数:
239
在WkWebView与JavaScript交互中,经常会在原生中注入MessageHandler,app中注入MessageHandler的方法 这里我们发现在向JS中注入handler的时候强引用了self,最终导致内存泄漏 解决方法 添加一个新类 WeakScriptMessageDelegat ...
分类:
移动开发 时间:
2018-03-01 11:47:55
阅读次数:
1319
线程持久化 Java中的Thread有一个特点就是她们都是直接被GC Root所引用,也就是说Dalvik虚拟机对所有被激活状态的线程都是持有强引用,导致GC永远都无法回收掉这些线程对象,除非线程被手动停止并置为null或者用户直接kill进程操作。所以当使用线程时,一定要考虑在Activity退出 ...
分类:
移动开发 时间:
2018-02-26 16:16:10
阅读次数:
193
原文:https://www.cnblogs.com/huajiezh/p/5835618.htmlJava内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。java对象的引用包括 强引用,软引用,弱引用,虚引用Java中提供这四种引用类型主要有两个... ...
分类:
编程语言 时间:
2018-02-26 11:14:17
阅读次数:
186
java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。 java对象的引用包括 强引用,软引用,弱引用,虚引用 Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期; 第二是有利于JVM进行垃圾回收 ...
分类:
编程语言 时间:
2018-02-25 12:58:25
阅读次数:
186
在之前写的一篇文章(XAML: 自定义控件中事件处理的最佳实践)中,我们曾提到了在 .NET 中如果事件没有反注册,将会引起内存泄露。这主要是因为当事件源会对事件监听者产生一个强引用,导致事件监听者无法被垃圾回收。 在这篇文章中,我们首先将进一步说明内存泄露的问题;然后,我们会重点介绍 .NET 中 ...
threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. ** 最好的做法是将调用threadlocal的remove方法.**: 把当前ThreadLocal从 ...
分类:
其他好文 时间:
2018-02-14 17:53:08
阅读次数:
133
一、BLOCK 循环引用 一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身。构成循环引用。 // 定义 block 的时候,会对外部变量做一次 copy,强引用, self自身为强引用。 解决方案如下: 二、计时器NSTimer循环引用 主要是因为从 ...
分类:
移动开发 时间:
2018-02-07 19:50:28
阅读次数:
238
以下是一些开发中会经常用到的宏,简单的进行了整理,为了今后可以更加方便的使用,从而提升开发的效率,不为此搭进去更多时间. 也希望有大家可以补充,从而使其更加强加! /**开发的时候打印,但是发布的时候无需打印的NSLog*/ #ifdef DEBUG #define NSLog(...) NSLog ...
分类:
移动开发 时间:
2018-01-26 17:10:11
阅读次数:
243
数组会对它里面的每一个元素进行一次强引用,保证不会释放 initwithrootview 但凡是通过initwithroot,add加载的东西也都是强引用了一次 所以,说把局部变量的导航控制器赋值给窗口的根视图时候,导航控制器(局部变量)依然存在,不会销毁 但是,子定义窗口的时候用局部变量就不信行 ...
分类:
其他好文 时间:
2018-01-26 01:39:04
阅读次数:
217