MSWeakTimer 的微调)
CCWeakTimer (来自描述
是[线程安全的 NSTimer
钩子替代品,不会保留目标,并支持与 GCD
队列一起使用。
动机
这个类首次提出的动机是拥有一种可以被对象 持有 和保留的计时器类型,而不创建保留周期(就像 NSTimer
造成的,因为它会保留其目标)。这样,您只需在拥有计时器的对象类的 -dealloc
方法中释放计时器即可。
当使用 NSTimer
时遇到的其他问题是文档中的以下说明
特殊注意事项
您必须从安装计时器的线程发送这个消息。如果从另一个线程发送此消息,计时器相关联的输入源可能不会被从其运行循环中删除,这可能导致线程无法正常退出。
很多时候,一个对象需要创建一个计时器,在某个事件发生时将其无效化。但是,当该对象与私有 GCD
队列一起工作时,这会很复杂。这个计时器对象是线程安全的,没有运行循环的概念,因此它可以与 GCD
队列一起使用,并可以从任何线程或队列中进行安装/无效化。
实现
CCWeakTimer
的实现已经过 WWDC 2013 核心操作系统实验室的 libdispatch
(GCD
) 工程师审查和验证。
如何使用
使用这个类方法创建一个 CCWeakTimer
对象
+ (CCWeakTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)timeInterval
target:(id)target
selector:(SEL)selector
userInfo:(id)userInfo
repeats:(BOOL)repeats
dispatchQueue:(dispatch_queue_t)dispatchQueue;
查看示例应用中的代码:sample app。
安装
- 使用 CocoaPods
只需将此行添加到您的 Podfile
pod 'CCWeakTimer'
- 手动
只需将文件 CCWeakTimer.h
和 CCWeakTimer.m
添加到您的项目中。
截图
兼容性
- 需要 ARC。如果您想在未启用 ARC 的项目中使用它,请在
CCWeakTimer.m
中标记链接器标志-fobjc-arc
。 - 支持 iOS iOS8+ 和 Mac OSX 10.8+。
许可
CCWeakTimer
可在 MIT 许可下使用。更多详情请参见 LICENSE 文件。