NSTimer使用注意点及总结
总结以下在NSTimer的使用中遇到的一些问题:
- 1. 不要在dealloc函数中停止并释放NSTimer
如果这样做,会导致对象永远无法调用dealloc函数,也就是会造成内存泄漏。
一个比较合理的解释是NSTimer的回调方法具有retain属性,所以不停止它的情况下被引用对象的retainCount无法降为0,导致内存泄漏的死循环
- 2.因为要实现类似视频软件里面,UIScrollview定时循环滑动,用到了NSTimer类。在特定时事件情况下需要暂停,和重新启动定时器。初始化:
myTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(handleMaxShowTimer:) userInfo:nil repeats:YES];
暂停用 [myTimer invalidate];
想要再重新启动使用了 [myTimer fire];
但是在执行[myTimer fire]时运行报内存错误。思考过后在 [myTimer fire]前加入语句 [myTimer retain];执行后无异常。个人猜测在执行初始化时
myTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(handleMaxShowTimer:) userInfo:nil repeats:YES];
给allco了,而[myTimer invalidate]应该不是暂停的意思,而是注销定时器,里面有release的操作。所以会在我执行[myTimer fire]后会崩溃。
所以在每次想再启动定时器的时候我都会再一次初始化一边。
时间: 2024-08-09 01:59:50