time
是react-native
提供的一个定时器,在实际使用中,经常会有使用不对,造成内存泄露的情况。很多React Native
应用发生致命错误(闪退)是与计时器有关。具体来说,是在某个组件被卸载(unmount)
之后,计时器却仍然在运行。
防止出问题的办法也很简单,在unmount
的时候,增加卸载定时器的操作:
|
|
这里的timer是在DidMount
中赋值的,如果是多次赋值呢?比如:
|
|
这里要介绍下setTimeout
的返回值,我们打断点可以看到,this.timer
是一个number。根据stack上面的其他网友的回答what-does-settimeout-return,setTimer会返回一个id,代表你已经向js的runtime系统中成功注册了一个定时器任务,这个id就是系统返回的id。
那如果是需要多次赋值,就一定要先将time clear掉,然后再赋值,或者使用多个参数来标志,否则之后就找不到上次的id,也就没办法clear了,同样可能造成内存泄露的情况。
例子如下:
|
|
这里的timer多次赋值,虽然前面的值被后面的覆盖,但是前面的time仍然会起效果,如果不想前面的time work,需要clear掉,然后再赋值。
代码如下:
|
|
综上,使用time的注意点:
- 记得unmount的时候,clear
- 多个timer要使用多个变量或者数组
- 多次赋值,记得把之前的值clear掉