问题标签 [nsrunloop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
770 浏览

iphone - iphone可可使用nsrunloop

我发现自己使用全局变量和 nsrunloop 的组合来强制在整个应用程序中进行同步。虽然它有效,但对我来说似乎有点难看。有没有其他方法可以达到相同的结果?

这是一个典型的例子:

在这段代码中,我需要等到parkingSpots 对象完全初始化后再初始化updateLocation。由于 updatelocation 期望parkingSpots 被完全初始化,没有runloop updatedlocation 没有正确初始化。使用 runloop,一切都按预期工作。

然而,这对我来说看起来很丑陋(在我的代码中的不同点设置一个全局变量)。有没有更优雅的解决方案?在此先感谢您的帮助!

0 投票
2 回答
4282 浏览

objective-c - 如何在 Objective-C 中使用 NSRunLoop?

如何使用如何在objective-C中使用NSRunLoop并等待一些变量改变值?

谢谢

0 投票
4 回答
6163 浏览

cocoa - 如何退出 [NSRunLoop runUntilDate]?

我正在编写一个必须与通过 USB 连接的设备进行通信的应用程序。应用程序在固定的时间轮流从设备发送和接收数据。所有 Rx/Tx 都发生在单独的线程中,否则 UI 将被阻塞。基本结构看起来基本上是这样的。(自动释放池和省略的东西)

发送数据后,应用程序等待接收数据或rxTimeoutTimer触发数据包,从而重新传输数据包。rx 操作有效,因为底层使用异步系统调用并调用看起来基本上像这样的 rx 处理程序。

有没有(简单的)方法可以[runLoop runUntilDate:]退出receiveData:?Apple 文档说删除所有计时器源并不能保证 RunLoop 退出。我读了一些关于打电话的东西,performSelector:onThread:...但它要么不起作用,要么我没有明白这一点。

谢谢。

0 投票
5 回答
338 浏览

iphone - iPhone - appDidBecomeActive: 和运行循环开始之间的数组丢失?

编辑:我在初始化后立即手动保留数组,并修复了它。杜尔。谢谢。

我在 UIScrollView 子类中保留一个 NSMutableArray,并在其中添加 UIImageView 子类的实例,因为每个实例都作为子视图添加。它需要是一个可变数组,因为我计划最终重新排列它们在数组中的顺序;在我尝试这样做之前,这个错误就已经发生了。我已经使用 NSLogs 来显示该数组的计数为 10,直到并包括在我的 AppDelegate 中调用 applicationDidBecomeActive:,并添加了一个计时器以在运行循环中每 0.001 秒触发一次。第一次开火,就再也找不到阵法了!我很困惑,几个小时以来一直试图追踪这个问题。

计时器工作正常(即当 printCount: 不访问数组时,这很好),只有当我尝试访问那里的数组时它才会中断。对 printCount: 的常规调用有效,但第一次触发计时器时 I 这两个对 printCount: 的调用之间可能发生什么?

我一直在用调试器无休止地单步执行程序。到目前为止,数组是正确的,即使在其内容更改后,它的内存地址也是相同的。然而,之后只有一个对象——它的 10 个元素被一个 UITouchData 实例替换。不知道它来自哪里。我的所有事件处理方法都不会尝试重新分配或更改数组。有什么想法可能会出错吗?我完全迷惑了。

0 投票
4 回答
3034 浏览

iphone - 如何从 iPhone 应用程序中删除 UIApplicationMain?

我正在尝试将游戏库移植到 iPhone。与 SDL 不同,此库不会完全控制您的 main() 函数,而是通过您自己的代码中的快速返回函数与它进行通信。因此,例如,明显的伪代码:

iPhone 使这变得困难,因为它要求您调用一个永远不会返回的 UIApplicationMain 函数。在 library_init(); 之后,我根本无法回到用户代码。

我不相信这是必要的——据说有 NSRunLoop 可以用来处理事件。但是,我不知道 UIApplicationMain 是否还有其他重要的功能。(请注意,我没有使用 .nib 文件的计划,这是我发现 UIApplicationMain 所做的唯一其他事情。)

我有三个我能想到的真实想法,但它们都是主要的实施工作,所以我想知道是否有人有这方面的经验,然后再花一天时间尝试注定失败的想法。

  • 在 Init 中,生成一个新线程,在该线程中运行 UIApplicationMain。要么跨线程通信所有事件(呃),要么只是让 UIApplicationMain 线程进入睡眠状态并在主线程中使用 CFRunLoop。但是,我听说 UIApplicationMain 不喜欢在不同的线程中运行。
  • 完全忽略 UIApplicationMain,只使用 NSRunLoop。我会错过重要的 iPhone 设置吗?谁知道!
  • 使用 longjmp() 做一些可怕的事情以在设置后跳出 UIApplicationMain 代码,祈祷它在拆卸期间不会做任何重要的事情。

建议?

0 投票
2 回答
2121 浏览

objective-c - OS X:如何使用 NSRunLoop 观察套接字读取事件?

我正在编写一个 Cocoa 应用程序。应用程序中有一个套接字,每当套接字变得可读时,我想从套接字读取数据,处理数据,并相应地更新用户界面。我想在主循环中集成读取事件检查,即我想将套接字附加到主循环并让主循环在该套接字变得可读时调用回调。

我编写了一个测试应用程序,但由于某种原因它不起作用:

该应用程序应该在 localhost 端口 1234 上进行侦听,并且每当有人连接到服务器或向服务器发送数据时,该应用程序应该在控制台上打印“Haiz”。但是,该应用程序根本什么都不做。套接字已创建,我可以远程登录到端口 1234,但该应用程序不会向控制台打印任何内容。

我究竟做错了什么?

0 投票
1 回答
963 浏览

objective-c - NSThread、AsyncSocket 和对象释放

我有一段使用 AsyncSocket 但将其移动到单独的运行循环的网络代码。我正在使用以下代码创建此运行循环:

这是我的 _workerLoop 的样子(他们都在同一个班级):

现在,根据文档, NSThread 将保留目标,并且由于该线程只会在 AsyncSocket 断开连接时终止,因此在套接字断开连接之前无法释放和释放该对象。

我该如何解决这个问题,或者我做错了什么?

0 投票
2 回答
1207 浏览

iphone - 如何启动一个 NSRunLoop,并确保它有一个被清空的 NSAutoreleasePool?

我有一个“同步”任务,它依赖于几个“子任务”,其中包括异步网络操作,但都需要访问单个NSManagedObjectContext. 由于NSManagedObjectContexts 的线程要求,我需要这些子任务中的每一个在同一个线程上执行。由于其中一些任务的处理量很大,我需要它们在后台线程上。

目前,我正在通过在我的单例SyncEngine对象的-init方法中执行此操作来启动一个新线程:

-initializeSyncThread方法如下所示:

NSRunLoop这是为这个线程启动的正确方法吗?有更好的方法吗?运行循环只需要处理“performSelector”源,它(及其线程)应该在进程的生命周期内存在。

在设置NSAutoreleasePool.

0 投票
1 回答
578 浏览

iphone - 在使用 NSDate、NSTimer 和 NSRunLoop 设置定时执行时,我需要在操作完成之前不释放哪一个?

这是处理它的代码部分:

但它是在一个循环中,所以我会做一堆这些,我不知道我需要留下什么才能让射击不被搞砸。

0 投票
2 回答
331 浏览

cocoa - 处理完 runloop 事件后,我该怎么做?

我在我的 Cocoa 应用程序中进行了一些处理,有时最终会通过数据层次结构调用以执行一系列工作作为事件的结果。每个小块都会创建和破坏一些资源。大多数时候我不想要这些资源,但我想找到一种聪明的方法,在所有工作之前创建它们并在最后杀死它们。

如果无法从“父级”或其他地方全局使用这些缓冲区等,是否有办法在事件循环运行结束时在某些代码中本地知道?然后,如果它们不存在,我可以创建它们,并保留它们直到运行循环结束,然后将它们重用于该时间之前的任何后续调用。

编辑:我不是在寻找关于如何重组我的代码的建议,无论如何我都可以这样做。这个问题只是为我提出了如何知道运行循环何时完成的问题。如果我在写,我不知道,Javascript,我会用setTimeout零来完成最终事件清理。我想间隔为零的 NSTimer 也可以做到这一点,但想知道是否有更清洁的东西。

谢谢。