定时开关怎么设置时间(时间定时器怎么调时间怎么接)

  • 时间:
  • 浏览:89
  • 来源:奥一装修网

时间定时器怎么调时间怎么接

在日常开发中,定时器的使用是必不可少的。在iOS中,主要使用NSTimer,CADisplayLink和dispatch_source_t来实现定时器,那么我们如何以正确的态度使用定时器? NSTimer,CADisplayLink问题:无法释放计时器,请在导航控制器中创建计时器,并每秒执行一次。 @接口ViewController()@属性(非原子性,强)CADisplayLink *链接; @属性(非原子的,强的)NSTimer *计时器; @属性(非原子性强)dispatch_source_t dispatchTimer; @ end-(void)viewDidLoad {【super viewDidLoad】; // NSTimer self。timer = 【NSTimercheduledTimerWithTimeInterval:1目标:自我选择器:@selector(timerAction)userInfo:nil重复:YES】; // CADisplayLink self。link = 【CADisplayLink displayLinkWithTarget:自我选择器:@selector(displayAction)】; 【self。link addToRunLoop:【NSRunLoop currentRunLoop】 forMode:NSRunLoopCommonModes】;}-(无效)timerAction {NSLog(@“已毁毁”);如果(self。timer!= Nil){【self。timer invalidate】; self。timer = nil;}}这时,当您单击导航栏左侧的Home时,您将看到到计时器停止时,也会执行dealloc。

网红计时器怎么调时间

Output。png解决方案二适用于NSTimer CADisplayLink,它创建了一个中间代理对象来解决此问题。问题的关键是NSTimer,CADisplayLink,它在内部使用一个强大的引用指针指向我们传入的对象。由于Apple不是开源的,因此我们无法对其进行修改,因此我们可以创建一个中间代理对象来解决这种尴尬的情况。结束@实现MLProxy +(instancetype)createProxyWeithTarget:(id)目标{MLProxy * proxy = 【self alloc】; proxy。target =目标; return proxy;}-(id)forwardingTargetForSelector:(SEL)aSelector {return self。target;} @ end-(无效)viewDidLoad {【super viewDidLoad】; self。proxy = 【MLProxy createProxyWeithTarget:self】; // NSTimer将运行时消息转发机制。 self。timer = 【NSTimercheduledTimerWithTimeInterval:1目标:self。proxy选择器:@selector(timerAction)userInfo:nil重复:YES】;}然后尝试了输出,可以看到一切正常,原理:外观一个中间代理,不会有循环引用现象,一旦控制器被销毁,所有引用将被释放,所有对象也将被释放。 Reference relationship。png注意:NSTimer,CADisplayLink,是使用RunLoop(运行循环)机制在底部实现的。

灯控定时器怎么设置时间

RunLoop。png在RunLoop中处理许多耗时的事务时,可能会导致计时器不正确。 假定计时器每秒执行一次。假设RunLoop每毫秒执行一次运行循环。每次执行下一个周期时,都会检查当前计时器已执行了多少时间。当时间恰好为1秒时,此时在RunLoop周期中,可能突然对计时器执行了许多事务,直到1。1秒,然后在0。1秒后执行了计时器,并且计时器不准确。会出现。 (以上假设尚未得到验证。问题:总而言之,我们在日常开发中是否有更准确,方便且不太引人注意的方式使用计时器?答:是的,那就是在我们的日常使用中使用dispatch_source_t原因是GCD中的dispatch_source_t计时器不依赖于RunLoop。Dispatch_source_set_timer(self。dispatchTimer,DISPATCH_TIME_NOW,1 * NSEC_PER_SEC,0 * NSEC_PER_SEC); dispatch_source_set_event_handler(self。dispatchTimer,^ {NSLog(@“%s”,__ func__);))。 Dispatch_resume(self);}突然看到这堆代码似乎并不容易,但是现在XCode非常聪明。只要点击dispatch_source计时器,您就会看到下图,并直接为您生成上述代码。 code。png接下来,您可以愉快地使用计时器。