后台线程上的 NSTimer 回调

2023-12-02

我有一个NSTimer定义如下:

timer = [NSTimer scheduledTimerWithTimeInterval:30
                                         target:self
                                       selector:@selector(fooBar)
                                       userInfo:nil
                                        repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

我想让它调用回调函数fooBar在本例中使用后台线程。但是当我检查时if ([NSThread mainThread]) i'm always将其放在主线程上。除了从回调函数中调度线程之外还有其他方法吗?


您正在将计时器添加到主线程。您的回调也将在主线程中。要在后台线程中调度计时器,我认为您需要使用 NSOperation 子类并将计时器从操作内部调度到 [NSRunLoop currentRunLoop]main method.

#import <Foundation/Foundation.h>

@interface BackgroundTimer : NSOperation
{
    BOOL _done;
}
@end



#import "BackgroundTimer.h"

@implementation BackgroundTimer

-(void) main
{
    if ([self isCancelled])
    {
        return;
    }

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:30
                                             target:self
                                           selector:@selector(fooBar)
                                           userInfo:nil
                                            repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

    //keep the runloop going as long as needed
    while (!_done && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                                              beforeDate:[NSDate distantFuture]]);

}

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

后台线程上的 NSTimer 回调 的相关文章

随机推荐

  • Kotlin 调试无法在 Visual Studio 代码中启动

    我是 Kotlin 编程语言的新手 所以 我已经下载了一些扩展 例如 Kotlin Kotlin 语言 Kotlin Formatter 当我按 F5 时 它给出了一个错误 只是一个重要的问题 那就是 我应该使用另一个像 intellij
  • 如何将 [xmin ymin xmax ymax] 形式转换为图像中标准化的 [x y width height]?

    我正在与 Microsoft 一起构建自定义视觉应用程序定制视觉 ai 我在用本教程 当您在对象检测项目中标记图像时 您需要使用标准化坐标指定每个标记对象的区域 我有一个 XML 文件 其中包含有关图像的注释 例如命名的sample 1 j
  • JavaScript 中无操作的约定是什么?

    JavaScript 中无操作的约定是什么 像蟒蛇一样pass命令 一种选择就是一个空函数 function jQuery 提供 noop 它只是调用上面的空函数 是否可以简单地输入一个值false or 0 在上下文中 所有这些工作都不会
  • 将 Visual Studio 项目保存在网络驱动器上

    我们刚刚从本地存储所有文件转向将它们存储在网络驱动器上 问题是我的 Visual Studio 项目现在也存储在其中 还没有版本控制系统 正在处理 我过去听说过这样做会出现问题 但从未听说过解决方法 现在有解决办法吗 Visual Stud
  • Swift:异步加载和显示照片

    我正在努力解决从 iPhone 显示照片库的问题collectionView 如果有人在画廊里有 50 张照片 一切都会正常 问题是 当某人有数千张照片时 图库加载时间为 10 秒 这对我的应用程序不利 当我从 Facebook 加载图像时
  • 更改枚举 Swift 的关联值

    如何更改枚举的特定关联值 enum Origin case search searchTerm String filtered Bool case category categoryName String subcategoryName S
  • 异步函数中的变量范围

    我已经构建了返回一些变量的函数 但我的函数异步使用另一个函数 function getVariable var myVariable asyncronousFunction function myVariable return myVari
  • 比较同一文档的两个字段[重复]

    这个问题在这里已经有答案了 我正在尝试查询一个巨大的 mongo 集合 其中包含大约 50 百万条记录 在 mongo 查询中 我只需要几个字段 文档中存在的对象 ID 和 MD5 为此 我做了 Query db getCollection
  • Android动画不重复

    我正在尝试制作会重复多次 或无限 的简单动画 看起来android repeatCount不起作用 这是我的动画资源 res anim first animation xml
  • 将字符串传递给python中的文件打开函数

    我有一个用户输入 我想将其作为打开函数的文件名参数传递 这是我尝试过的 filename input Enter the name of the file of grades file open filename r 当用户输入的是open
  • PHP 字符串替换

    我有字符串 var 我需要在其中替换一些文本 第一个 X 需要替换为 A 第二个 X 需要替换为B等等 下面是一个例子 我尝试过str replace但这行不通 Thanks 你可以使用preg replace s limit只替换一次的说
  • 如何在AWS S3中添加缓存控制?

    我已通过 s3cmd 命令将 20000 个文件移动到 AWS S3 现在我想为所有图像添加缓存控制 jpg 这些文件位于 s3 bucket name images 如何通过 s3cmd 为所有图像添加缓存控制或者是否有其他方法来添加标头
  • Facebook Like Box 无法在 Ember 应用程序上加载

    我试图让类似的框在我们的 ember 应用程序中工作 在一个名为的模板中about 问题是 如果我从另一条路线进入 ember 应用程序 而不是about路线 然后导航至about路线与link to助手 则不会呈现类似框 相反 如果我输入
  • Dagger 2.0 - AppEngine - gradle 配置

    我正在尝试在 AppEngine 项目中从 Dagger 1 2 2 迁移到 Dagger 2 0 1 NOT安卓一 使用 Dagger 1 2 2 很简单 compile com squareup dagger dagger compil
  • 在 iOS 中,如何使用 Xcode 从 Localized.strings 中删除语言

    这就是我的 xcode 项目的样子 我想删除英国和美国的 Localized strings 只保留英语的 Localized strings 我怎样才能做到这一点 按照下图中的说明进行操作
  • 道场声明正确的方式

    file dojo dir1 utils XmlJsonUtils js Author Rajat Khandelwal define dojo base declare declare function declare return de
  • OpenCart 管理菜单链接 url

    我对 OpenCart 很陌生 我正在尝试为其制作一个模块 我想要在管理菜单中链接到我正在创建的模块 因此我编辑了此文件 admin view template common header tpl 我添加的代码 li a class top
  • 时间:2019-03-17 标签:c#Array.FindAllIndexOfwhichFindAllIndexOf

    我知道c 有Array FindAll and Array IndexOf 有没有Array FindAllIndexOf返回int string myarr new string s f s int v myarr Select b i
  • 在 for 循环中处理“借用的值没有足够长的寿命”[重复]

    这个问题在这里已经有答案了 我正在抓取的网站要求我查询 HTML 页面的标题标签以及一些其他元素 看看我是否可以辨别文章的标题 我创建一个HashMap lt str u8 gt 并立即 insert title tag text 1 查询
  • 后台线程上的 NSTimer 回调

    我有一个NSTimer定义如下 timer NSTimer scheduledTimerWithTimeInterval 30 target self selector selector fooBar userInfo nil repeat