美文网首页
1.定时器相关问题

1.定时器相关问题

作者: ProfessorFan | 来源:发表于2022-05-25 15:08 被阅读0次

问题

1.定时器不准问题
2.定时器内存泄漏问题

答案

1.定时器不准问题

1.当我们使用NSTimer/CADisplayLink 的时候,会有不准的时候,是由于当时runloop 比较繁忙导致的.
2.NSTimer 停止计时,是由于当时的runloopModel 变为滚动模式导致的,要解决这个问题,我们需要把当前的timer添加到 runloopModel 为 comment标记的那个模式

2.NSTimer/CADisplayLink定时器内存泄漏问题

方案1 通过自定义的第三方NSObject

这个会走消息发送,动态解析,消息转发

@interface FAN_Proxy : NSObject
+ (instancetype)proxyWithTarget:(id)target;
@property (weak, nonatomic) id target;
@end

@implementation FAN_Proxy

+ (instancetype)proxyWithTarget:(id)target
{
    FAN_Proxy *proxy = [[FAN_Proxy alloc] init];
    proxy.target = target;
    return proxy;
}

- (id)forwardingTargetForSelector:(SEL)aSelector
{
    return self.target;
}

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:[FAN_Proxy proxyWithTarget:self] selector:@selector(timerTest) userInfo:nil repeats:YES];

@end


方案1 通过系统专门用来系统转发的类 NSProxy解决问题

这个是专门用来做 消息转发的,这个是最优的解决方案

@interface FAN_Proxy : NSProxy
+ (instancetype)proxyWithTarget:(id)target;
@property (weak, nonatomic) id target;
@end

@implementation FAN_Proxy

+ (instancetype)proxyWithTarget:(id)target
{
    // NSProxy对象不需要调用init,因为它本来就没有init方法
    MJProxy *proxy = [FAN_Proxy alloc];
    proxy.target = target;
    return proxy;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    return [self.target methodSignatureForSelector:sel];
}

- (void)forwardInvocation:(NSInvocation *)invocation
{
    [invocation invokeWithTarget:self.target];
}

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:[FAN_Proxy proxyWithTarget:self] selector:@selector(timerTest) userInfo:nil repeats:YES];

@end

相关文章

  • 1.定时器相关问题

    问题 1.定时器不准问题2.定时器内存泄漏问题 答案 1.定时器不准问题 1.当我们使用NSTimer/CADis...

  • 踩坑NSTimer

    0.目录 概论,非主线程定时器导致的问题,定时器在界面滑动时候失效,定时器的准确性,定时器中的强引用。 1.概论 ...

  • NSTimer 定时器相关问题汇总

    1:NSTimer的创建 这时会发现timer的ation方法不会调用。坑一:子线程启动定时器问题:我们都知道iO...

  • 内存管理(NSTimer、autorelease、weak原理、

    总结一下我们在内存管理中处理方法,以及出现的常见问题 定时器相关的问题: 1 NSTimer的问题看如下的代码: ...

  • Javascript小进阶5--定时器用法

    ITPUB老博客搬迁至此 定时器:也称延时器 问题1:定时器是否会阻塞程序往下执行? 证明:1. setTimeo...

  • 定时器

    1.倒计定时器(setTimeout) clearTimeout清除定时器2.循环定时器(setInterval)...

  • stm32学习记录

    定时器相关 定时器的时钟来源这里,定时器的时钟来源有 4 个:1) 内部时钟(CK_INT)2) 外部时钟模式 1...

  • 第十三节 JavaScript 定时器 单线程

    一、定时器 1. JS存在两种定时器 setTimeout() 延迟定时器 setInterval() ...

  • iOS-定时器相关

    定时器相关文档内容. 1.一个play方法实现全屏炫酷倒计时的小demoiOS轮播图:CADisplayLink实...

  • IOS常见问题分析

    1、定时器问题 1) 定时器在子线程中不启动: 子线程中启动定时器的方法:

网友评论

      本文标题:1.定时器相关问题

      本文链接:https://www.haomeiwen.com/subject/yqzrprtx.html