我有一项任务需要每1秒执行一次.目前我有一个NSTimer每1秒重复emits 一次.如何在后台线程(非UI线程)中启动计时器?

我可以在主线程上启动NSTimer,然后使用NSBlockOperation来调度后台线程,但我想知道是否有更有效的方法来实现这一点.

推荐答案

计时器需要安装到运行循环中,该循环在已经运行的后台线程上运行.该线程必须继续运行run循环,才能让计时器真正启动.为了让后台线程能够继续触发其他计时器事件,它需要生成一个新线程来实际处理事件(当然,假设您正在进行的处理需要大量时间).

不管它值多少钱,我认为通过使用Grand Central Dispatch或NSBlockOperation生成新线程来处理计时器事件是对主线程的完全合理的使用.

Objective-c相关问答推荐

如何创建圆形按钮?

UITabBar 中的自定义 colored颜色

核心数据 - 如何获取具有最大值属性的实体

如何在 iOS Objective-C 头文件中将函数标记为已弃用?

用 UIActivityIndi​​catorView 替换 UIBarButtonItem

保存 UIImage,以错误的方向加载它

多个(两个)持久存储可以与一个对象模型一起使用,同时保持一个到另一个的关系吗?

为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器?

setStatusBarHidden 在 iOS 9.0 中已弃用

iOS7过度导航栏按钮填充

Apple 的 API 中的k前缀表示什么?

从 UIPageViewController 中移除视图控制器

了解按位与运算符

iOS:如何将 UIViewAnimationCurve 转换为 UIViewAnimationOptions?

仅在 UIView 顶部的圆角

UIScrollView - 显示滚动条

如何阻止 NSNotification 中的观察者调用两次?

即使在静音模式下也能在 iPhone 上播放声音

Block 隐式保留'self';明确提及touch以表明这是预期行为

公开只读但具有私有设置器的 Objective-C 属性