后台线程上的 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 回调 的相关文章

  • 如何使用所有类型的 UTI 初始化 UIDocumentPickerViewController

    我想打开 UIDocumentPickerViewController 并且它应该允许用户选择所有类型的文件 我尝试在 UIDocumentPickerViewController init 方法中提及所有 UTI 但仍然找不到某些文件 如
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • 如果在系统设置中关闭隐藏式字幕,则不会显示字幕

    我正在尝试显示字幕 无论设备在辅助功能下设置了什么 目前 如果设备设置为英语并在设置中启用隐藏式字幕 则将播放英语字幕 如果设备设置为西班牙语 则将播放西班牙语字幕 我希望无论隐藏式字幕是否打开 都能播放字幕 我尝试添加这段代码 https
  • 如何在 VMware 中运行的 MAC 操作系统中安装 Xcode - 无法安装 Xcode,因为需要 OS X 版本 10.12 或更高版本

    我想开始进行 iOS 应用程序开发 但此时我买不起 MAC 计算机 因此我在 VMware 的虚拟机中安装了 MAC OS X Sierra 方法如下 下一步是获取 XCode 所以我打开App Store并搜索它 我发现一个错误 内容是M
  • 如何在 Objective C 类中设置布尔类型属性

    如何在 Objective C 类中使用布尔属性 我是这样做的 property nonatomic copy BOOL locationUseBool 但它给出了错误 具有 复制 属性的属性必须是对象类型 正确的申报方式是什么 您也可以这
  • iOS:如何定义公共方法?

    如何在每个视图控制器类中定义一个可以从任何地方调用的方法 我有一个方法可以为我带来一个 json 文件 并且我希望它可以重用 因为我的应用程序上有多个 json 调用 你能帮助我吗 您可以通过类别添加它 EDIT 创建一个新的 h m 文件
  • Objective c,实例成员的内存管理

    我对实例成员的内存管理感到困惑 我有一个带有 ivar 的课程 DetailedResultsTableViewController detailedResultsTableViewController and property nonat
  • ReferenceError:找不到变量:__gCrWeb

    我的网站上有 javascript 错误跟踪 最近 我开始在 iPhone IOS 7 和 8 上的 Chrome 版本 37 和 38 中收到以下错误 ReferenceError 找不到变量 gCrWeb 除了一些参考文献之外 我找不到
  • 在 UITableView 中进行分页的最佳方法

    我正在开发一个房地产应用程序 用户填写表单 最小房间数 价格等 后 应用程序查询数据源服务器 并获取具有特定键 值对 属性名称 属性地址 经度 纬度 价格等 的 json 字符串 我想做的是允许用户浏览 UITableView 中的列表 即
  • iOS 从另一个类更新 ViewController UILabel

    我是开发新手 一直在用头撞墙试图弄清楚这一点 我确信 我错过了一些愚蠢的东西 但在尝试了各种不同的解决方案后 我仍然无法得到结果我在寻找 我希望能够从另一个类更新 ViewController 中的 UILabel 这是一个我无法运行的小演
  • didReceiveRemoteNotification 未调用,iOS 10

    在 iOS 9 3 中 didReceiveRemoteNotification方法在以下两种情况下都会被调用 1 收到推送通知时 2 当用户通过点击通知启动应用程序时 但在 iOS 10 上 我注意到didReceiveRemoteNot
  • iOS11视觉框架映射所有人脸特征点

    我正在使用视觉框架并使用以下代码获取所有里程碑点 if let allFaceLandmarks landmarks allPoints print allFaceLandmarks 但无法找到这些点的映射 例如右眼的索引号 寻找相同的东西
  • Swift:在标签背景中制作图像

    我想将标签放入带有角半径的红色矩形的图像中 条件是图像大小必须等于或略大于标签大小 为此我找到了一个类似的question https stackoverflow com questions 3037902 adding backgroun
  • iOS:适用于 iOS 的基于 Flash 的编程应用程序?

    我想知道 有没有办法支持 iOS 的基于 Flash 的编程应用程序 它可以是本机 混合或网络应用程序 我想知道 是否有可能为 iOS 设备开发基于 Flash 的应用程序 我看过论坛 到处都说这是不可能的 所以只想在开始任何开发之前确认一
  • 使 MKMapView 只放大 centerCoordinate 吗?

    我有一个始终位于地图中心的 MKPinAnnotationView 平移和缩放时 该图钉为我提供了地图的中心坐标 纬度 经度 目前 当您放大时 它只会放大您指定地图放大的位置 我真的很想将变焦锁定在图钉上 关于我如何实现这一目标有什么想法吗
  • 如何检查dispatch_async块是否已完成运行

    所以基本上我需要能够在块完成运行后运行 segue 我有一个块可以执行一些 JSON 操作 我需要知道它何时完成运行 我有一个队列 我称之为 json queue jsonQueue dispatch queue create com ja
  • 如何设置 NSAttributedString 的字体大小

    编辑 这已被标记为重复 但正如我在下面所述 我正在寻找一个 Swift 解决方案 我发现的所有内容都是用 Objective C 编写的 我正在尝试将 HTML 转换为 NSAttributedString 但不知道如何设置字体样式和大小
  • DFP 问题:无广告可展示

    我的应用程序在 UIScrollView 中提供三个广告 通过 DoubleClick for Publisher 我使用旧版本的适用于 iOS 的 AdMob SDK 一切正常 我决定下载新版本 因为 AppStore 出现一些问题 添加
  • 针对架构 armv7 的 iOS 链接器错误的 Google 转化跟踪

    我正在尝试将 iOS 版 Google 转化跟踪功能添加到我的 iPhone 应用程序中 该应用程序的基础 SDK 是 iOS6 该应用程序的有效架构是armv7 armv7s 该应用程序的 iOS 部署目标是 4 3 我正在使用最新的 x
  • 将 GestureRecogniser 附加到多个图像视图

    今天我在将相同的手势识别器附加到多个图像视图时遇到了一些奇怪的事情 它仅附加到最后一个视图 换句话说 它只能附加到一个视图 我必须创建多个手势识别器才能满足我的要求 以下是我所做的 我做的对吗 这是将识别器附加到多个图像视图的唯一方法吗 请

随机推荐

  • 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