线程安全 NSTimer
替换,不保留目标,并支持与 GCD
队列一起使用。
此类的第一个动机是想有一种类型的计时器,对象可以 拥有 并且保留它,而不会造成循环引用(如 NSTimer
造成的,因为它会保留其目标)。这样您就可以在拥有计时器的对象类的 -dealloc
方法中释放计时器。
使用 NSTimer
时遇到的其他问题是文档上的以下注意
特殊考虑事项
您必须从安装计时器的线程发送此消息。如果您从其他线程发送此消息,与计时器关联的输入源可能不会被从其运行循环中移除,这可能会阻止线程正确退出。
很多时候,当对象需要在某个事件发生时创建一个计时器并使它无效时,这很棘手。该计时器对象是线程安全的,并且没有运行循环的概念,因此它可以与 GCD
队列一起使用,并且可以从任何线程或队列安装/使无效。
MSWeakTimer
的实现已被 WWDC 2013 核心操作系统实验室的 libdispatch
(《GCD》)工程师审查和验证。
使用此类方法创建 MSWeakTimer
对象
+ (MSWeakTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)timeInterval
target:(id)target
selector:(SEL)selector
userInfo:(id)userInfo
repeats:(BOOL)repeats
dispatchQueue:(dispatch_queue_t)dispatchQueue;
查看在 示例应用程序 中的代码。
只需将此行添加到您的 Podfile
pod 'MSWeakTimer', '~> 1.1.0'
将文件 MSWeakTimer.h
和 MSWeakTimer.m
添加到您的项目中。
MSWeakTimer.m
标记为链接器标志 -fobjc-arc
。MSWeakTimer
在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。