NSTimer 和更新 UI

2023-12-27

我一直在努力让我的游戏能够正常运行NSTimer。我发现很多人都遇到了与我类似的问题,我只需要对某些事情进行一些澄清。

基本上我有一个NSTimer在主线程上运行,该线程正在更新代表时间的图像,但我也有一个地图视图。当用户平移地图时,计时器被阻止。我的问题是,如果我创建一个新线程并将计时器添加到其运行循环中,当我执行选择器(更新 UI)时,这不会再次阻塞计时器线程吗?我也知道从辅助线程更新 UI 是不好的做法,那么我该如何处理呢?

UPDATE:我认为 mapView 阻塞了计时器,因为它们都在同一个运行循环中运行。我现在已经用一个带有自己的运行循环的计时器线程修复了这个问题,但这导致了我遇到了第二个问题,这让我陷入了困境!这是代码...

//called when I need to restart the timer
[NSThread detachNewThreadSelector:@selector(resumeTimer) toTarget:self withObject:nil];  


-(void) restartTimer {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    timer=[NSTimerscheduledTimerWithTimeInterval:1.
                                          target:self
                                        selector:@selector(dim)
                                        userInfo:nil
                                         repeats:YES];

    [self performSelectorOnMainThread:@selector(timerImageUpdate)
                           withObject:nil
                        waitUntilDone:NO];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];

    [pool drain];
}

这段代码给了我一个[池排水]上发生 Bad_access 错误;

我已经在仪器中运行了代码,但仍然不明白为什么它会给我这个错误。有任何想法吗?


如果您为计时器创建一个线程,您仍然需要在主线程上进行 UI 更新。你可以这样做PerformSelectorOnMainThread:withObject:waitUntilDone: http://developer.apple.com/iphone/library/documentation/cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelectorOnMainThread:withObject:waitUntilDone:NO它将在主线程上对方法调用进行排队,而不会阻塞计时器线程。

但是,如果主线程的runloop http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1被地图平移阻止(为什么?)UI 更新仍将在事件队列中等待,直到地图平移完成。

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

NSTimer 和更新 UI 的相关文章

  • Python 多处理进程在一段时间后休眠

    我有一个脚本 它运行一个目录 并搜索具有给定结尾 即 xml 的所有文件以查找给定字符串并替换它们 为了实现这一点 我使用了 python 多处理库 作为示例 我使用 1100 个 xml 文件 其中包含大约 200MB 的数据 在我的 M
  • .net 中的线程

    我有一个 winforms 应用程序的简单示例 我在目录选择器中选择一个目录 然后单击按钮循环遍历该目录并将目录中的每个文件复制到另一个目录中 我想在后台线程上进行文件复制以避免锁定 GUI 我正在寻找最简单的解决方案 创建后台线程 传递源
  • 在不使用PrepareForSegue的情况下在segue之间传递数据

    我正在使用情节提要创建一个用户设置帐户 分 5 个步骤 每个步骤都有一个 ViewController 1 输入姓名 联系人等 2 导入照片 3 输入等 4 更多输入 5 确认页面 如果用户单击 确认 gt 获取所有输入并上传到解析 当我在
  • 在 IOS 上检查 Facebook Connect 会话

    在新的 Facebook 库中 FBSession 对象消失了 当用户启动应用程序时 如何在不提示 safari 或 uiwebview 的情况下立即检查用户的设备上是否有有效会话 facebook isSessionValid 方法适用于
  • 在多线程场景中正确锁定 List

    好吧 我只是无法正确理解多线程场景 抱歉再次问类似的问题 我只是在互联网上看到许多不同的 事实 public static class MyClass private static List
  • Java 中的“实现 Runnable”与“扩展线程”

    从我什么时候开始使用线程Java 我找到了这两种编写线程的方法 With 实施Runnable public class MyRunnable implements Runnable public void run Code Started
  • 取消按钮和 UIActionSheet 的问题

    如何确定 UIActionSheet 上的取消按钮是否被按下 我的 UIActionSheet 设置如下 IBAction fileButtonPressed UIActionSheet mymenu UIActionSheet alloc
  • Linux 内核 - 如何停止等待信号量的 kthread?

    在编写 Linux 内核模块时 我遇到了一个 kthread 问题 在等待信号量解锁时无法唤醒该 kthread 这会导致线程不可停止并且rmmod尝试卸载模块时冻结 请注意 该模块在 3 10 内核上运行 我无法将其更新到较新的版本 客户
  • 流行的“易失性轮询标志”模式被打破了吗?

    假设我想使用布尔状态标志来进行线程之间的协作取消 我意识到人们最好应该使用CancellationTokenSource反而 这不是这个问题的重点 private volatile bool stopping public void Sta
  • locationManager:didRangeBeacons 方法未检测到 BLE 设备

    我正在使用 Nordic BLE nRF8001 开发套件来测试 CoreBluetooth 使用 CBCentralManager 的方法 例如 didDiscoverPeripheral didConnectPeripheral 等 我
  • UIWebView didFinishLoading 多次触发

    我有一些代码需要在 a 之后运行UIWebView完成加载文档 为此我设置了UIWebView的委托给我的控制器 并实现了webViewDidFinishLoading method 这会被多次调用 具体取决于要加载的页面类型 我不确定是否
  • 具有硬件集成的 iOS 应用程序

    我想开发一个使用外部硬件插件的 iOS 应用程序 有点像 Squarehttps squareup com https squareup com 但是我在苹果的文档中找不到任何参考资料 有人能指出我正确的方向吗 如果您想使用 iPod 连接
  • iPhone - 动画视图控制器演示

    我有一个 UINavigationControl 我想呈现一个视图控制器 将其从顶部推送 并将其从视图中删除 将其推送到顶部 有没有办法更改调用时使用的默认动画 self navigationController pushViewContr
  • scrollToRowAtIndexPath:atScrollPosition:动画滚动太慢

    基于分页 UIScrollView 的页面更改 我正在调用scrollToRowAtIndexPath atScrollPosition animated到所显示的该页面的表详细信息 void scrollViewDidScroll UIS
  • 如何在 iPhone 应用程序的 url 中传递字符串值

    NSURLRequest request NSURLRequest requestWithURL NSURL URLWithString http www krsconnect no community api html method ba
  • UICollectionviewcell 更改背景

    如果我知道部分编号和项目编号 如何更改单元格中的背景 下面的代码显示了我如何尝试做到这一点 UICollectionViewCell collectionView UICollectionView collectionView cellFo
  • UITextInput setMarkedText:selectedRange 不起作用? (不可能!)

    我想以编程方式设置标记的文本 并且由于 iOS5 UITextView 和 UITextField 符合 UITextInput 这应该是可能的 但由于某种原因我总是得到markedText为零 我在这里缺少什么 这是我尝试过但没有成功的方
  • iOS:addConstraints:应用程序崩溃

    Problem 我似乎无法在现有项目中采用自动布局 Details 我之前也遇到过与此问题相同的问题presentViewController 在 iOS 但所提供的答案都不是我的解决方案 我正在使用所有没有 xib 的故事板视图 我的 使
  • 如何正确使用 nsoperationqueue 的 autoreleasepool

    我有一个正在重构的应用程序 我刚刚实现了多线程 以便 UI 可以运行得更流畅 在 iPhone 模拟器中 我没有遇到任何泄漏 但在运行 iOS 4 2 的 iPhone 3G 上进行测试时 出现了内存泄漏 我已经做了很多搜索来使用操作队列实
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Libwebsocket 客户端示例

    我试图找到一个示例来解释如何使用 libwebsocket 实现客户端 但我没有得到任何令人信服的代码 有什么链接可以参考吗 更正了代码示例罗仁伟跟 共事libwebsockets 1 6 在 Ubuntu 14 04 上测试 示例服务器
  • SCNText - 背景“语音气泡”

    如何将背景 例如 语音气泡 或矩形 插入到 SCNtext 中 具体来说 如果我插入 Hello World 作为 SCNText 显然作为场景中的 SCNNode 那么如何仅为该文本添加背景 它会是一个 UIimage 它将作为 SCNN
  • 强制转换中的中间指针必须是“const 限定的” - 为什么?

    在下面的代码中 include
  • 从 OpenCV 文件中读取算法参数

    我正在尝试从 XML 文件中读取经过训练的期望最大化模型的参数以供以后使用 为了存储我调用的模型 cv FileStorage fs model xml cv FileStorage WRITE classifier write fs cl
  • 有没有办法滚动到锚点而不是用javascript跳转(比如平滑滚动)

    我有一个带有编号锚标记的大文档 如下所示 还有一个文本框 用于输入数字以转到使用的锚点window location hash 我还使用箭头键转到下一个或上一个锚点 我想滚动到锚点以便给出一些方向感 a some text a some t
  • 使用nodejs + Express处理服务器端和客户端错误的最佳方法是什么

    我想知道处理响应请求中的错误的最佳方法 我有这条接收请求的路线 app get getInfo function req res next let obj try obj date lastUpdatedDate utils appVers
  • 如何获取动态查询结果的行数?

    我创建了一个动态查询 一切运行良好 我使用以下命令执行查询 EXEC sp executesql SQLQuery 其中 SQLQuery 是一种动态查询 我唯一的问题是如何返回执行此查询后存在的行数 我希望我的问题很清楚 提前致谢 您可以
  • 通过指向错误函数类型的指针调用函数(未知)

    我有一个动态链接到库的程序 该程序将函数指针传递给该库以执行 但 ubsan 未定义行为清理程序 指定该指针位于不正确的函数类型上 而这种情况只会发生 如果回调函数有一个类作为参数 如果回调函数有一个类作为参数 但仅向前声明 如果我指定编译
  • 在 jQuery UI 可调整大小组件中嵌入 Ace 编辑器

    我正在尝试通过将 ace 编辑器嵌入到可调整大小的组件中来调整其大小 我一直在尝试使用 jQuery UI 可调整大小组件 但无法让 ace 编辑器出现在可调整大小组件内 Code
  • Intellij:不是有效的项目 ID:

    I updated Intellij Idea to 2018 2 6 现在我无法使用 Play Configuration 启动我的 Play Project 它给了我这个 error Not a valid project ID myP
  • Jackson 没有序列化字段

    我有以下课程 public class Entity private String id private String name private List
  • 如何在 Windows 工作站/服务器上将 Git 设置为 Web 项目 (ASP) 的 VCS?

    我们团队中有 5 个人从事一些 ASP 项目 局域网中有一台本地服务器运行Windows Server 我们不经常使用它 只是将其作为备份存储 我们还有一台运行 Windows Server 的远程服务器 我们在那里发布最终产品并使用远程桌
  • JavaScript .CSV 到数组

    我有一个 CSV 文件 它有 4 列和数千行 我想要 4 个数组 每一列一个 我最近开始学习 JavaScript 有人可以告诉我该怎么做吗 在 Python 中 这非常简单 只需几行代码 然而 当我看到JS中的相关帖子后 我感到非常困惑
  • 我如何在 JPQL 中内部加入子查询

    我需要一个用于 MySQL 查询的 JPQL SELECT FROM table1 t1 INNER JOIN table2 t2 ON t1 id t2 table1 id INNER JOIN SELECT FROM table1 t3
  • 在android聊天气泡中插入imageview可调

    我想在我的 Android 聊天中执行此操作 但我无法让我的照片适合我的泡泡 我有一个LinearLayout 他的背景是一个气泡9patch 在其中 我有一个图像视图 在此处插入图像但不是如何使其适合我们在屏幕上看到的背景 这就是我的形象
  • 我应该用通用类定义为我的文件命名什么?

    我正在编写几个具有泛型类型参数的类 但我需要重载这些类 因为在不同的场景中我需要不同数量的参数 基本上 我有 public class MyGenericClass
  • 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

    我正在使用Scanner方法nextInt and nextLine 用于读取输入 它看起来像这样 System out println Enter numerical value int option option input nextI
  • 未找到 Docker 映像入口点脚本

    我有一个Dockerfile like FROM frolvlad alpine oraclejdk8 slim ADD build libs zuul jar app jar ADD src main script startup sh
  • xarray.DataArray.roll 方法创建不需要的工件

    最近 我一直在使用 xarray 加载一堆 NetCDF 文件并使用 cartopy 绘制它们 今天我注意到一件有趣的事情 对于我感兴趣的区域 我需要选择 20W 到 40E 经度 根据设计 我无法用一种方法做到这一点KEdiff mean
  • NSTimer 和更新 UI

    我一直在努力让我的游戏能够正常运行NSTimer 我发现很多人都遇到了与我类似的问题 我只需要对某些事情进行一些澄清 基本上我有一个NSTimer在主线程上运行 该线程正在更新代表时间的图像 但我也有一个地图视图 当用户平移地图时 计时器被