问题标签 [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 投票
3 回答
3757 浏览

objective-c - NSRunLoop 冻结与 NSTimer 和任何输入

出于某种原因,当我按下(单击并按住)任何控件时,我的应用程序中的 NSTimer 会冻结并且在我释放鼠标按钮之前不会触发。当我按下鼠标时,它根本不会触发。这在短时间内很好,但如果我打开一个弹出菜单或下拉组合框,它也会冻结。

我不确定我是否遗漏了什么,但这似乎是不正确的行为。

我希望能够单击 NSPopUpButtonCell 的向下箭头(甚至单击并按住 NSTableView),而不会冻结整个 NSTimer(重绘 NSView)。

任何意见/建议将不胜感激。

NSTimer 以 NSDefaultRunLoopMode 模式添加到 currentRunLoop。

0 投票
3 回答
2636 浏览

iphone - NSTimer 在设备锁定时触发

我目前正在创建警报。我使用 NSTimer 来安排我的闹钟。我的问题是当设备进入锁定模式时,我的 NSTimer 不会触发。我认为 NSTimer 不会触发,因为我的应用程序在锁定时会进入挂起状态。你能帮我找到解决我的问题的方法吗?

我找到了一些关于 UIBackgroundModes 的主题,但我不知道它对我有什么帮助。

谢谢..

UILocalNotification 的问题是当设备处于静音状态时,听不到声音。我的实现是当应用程序处于前台或设备被锁定但应用程序当前正在运行时,我使用 NSTimer 发出警报。当 applicationDidEnterBackground: 被调用时,我将 UILocalNotification 安排为警报。

0 投票
1 回答
1331 浏览

iphone - 在 iPhone 上使用带有辅助线程的 AsyncSocket

我在 iPhone 上使用 AsyncSocket 与服务器通信。AsyncSocket 基于运行循环,但我的应用程序基于线程。这意味着,我启动一个新线程来写入数据并等待直到在同一个线程上收到响应。但是我不能直接从另一个线程调用 AsyncSocket 的方法,我必须使用:

它确实有效,但我无法从以这种方式调用的方法“writeSomeData:”获得响应,因为 performSelectorOnMainThread 什么也不返回。

writeSomeData: 方法执行以下操作:

我可以通过访问类变量“dataReceived”来获得响应,但此时它的内容发生了变化。

谁能告诉我如何在单独的线程上使用 AsyncSocket (或者通常,如何处理基于运行循环的类),以便如果我调用该类的方法,它会阻塞,直到该方法被执行并收到响应?

谢谢你。

0 投票
2 回答
7499 浏览

iphone - 调用 -[NSRunLoop runUntilDate:] 是个好主意吗?

打电话通常是个好主意-[NSRunLoop runUntilDate:]吗?它似乎可以正常工作,但是告诉运行循环从运行循环中运行让我感到紧张。

更多信息:

我现在有一个从 REST 服务获取数据的项目。需要获取的一项关键信息是具有有效数据的日期范围。这是一小部分数据,只需要获取一次,所以我决定处理它的最佳方法是让属性下载数据,如果局部变量是nil. 我正在使用ASIHTTPRequestand ASINetworkQueue,所以默认情况下一切都是异步的,为了使其正常工作,在下载和处理数据之前,该属性无法返回。这是我的代码大纲,变量的名称已更改以保护无辜者:

同样,这似乎工作正常。使用这种方法是否有任何潜在问题?

0 投票
1 回答
347 浏览

iphone - NSRunLoop 计时问题

也许有更好的方法,但我想在用户点击 UIalertView 中的按钮时弹出一个选择列表。我希望在警报视图仍然可见时弹出此列表,并在用户点击选择列表中的项目时关闭所有内容。

我想我可以通过将列表添加为 UIAlertView 中的子视图并保持 UIalertView 在 while 循环中显示 NSRunLoop 并弹出选择列表设置的标志。但是,我无法让它工作,因为在 while 循环回到 NSRunLoop 之前没有设置标志。第二次点击会让它退出 while 循环,但这不是我想要的。

我将 popUpPicker.tag 设置为用户在 tableView:didSelectRowAtIndexPath: 列表的方法中点击的行,然后调用列表委托方法。

我可以让弹出列表正常工作,但只有在 UIAlertView 关闭之后。

谢谢你的帮助。

约翰

0 投票
1 回答
320 浏览

cocoa - 为什么异步 SOAP Web 服务调用不起作用

我使用 WSMakeStubs(在开发工具中)生成用于访问 SOAP Web 服务的存根代码。我对对象的调用当前只是阻塞。当我尝试使用异步调用时,什么都没有发生,我确信这与我对运行循环的理解有关。我初始化一个对象并尝试将它安排在这样的运行循环中:

在运行循环上调度的存根调用如下所示:

对 [self getRef] 的调用返回一个已设置回调的调用对象。然后回调应该调用我的目标和选择器,但是在使用运行循环调用调度后它永远不会到达那个断点。需要在运行循环调度中进行哪些更改才能使其正常工作?

同步调用工作正常,所以我很确定这不是服务器问题。

0 投票
2 回答
3639 浏览

iphone - NSRunLoop 和 GCD 队列

我正在创建一个用于 iOS 的 c++ 库(是的,不幸的是它必须是 C++),它使用 AVCaptureSession 来捕获通过 captureOutput 回调传递的视频帧。C++ 库是我可交付的产品。我有一个可可触摸应用程序来测试/演示它。所以,它看起来像这样:

(测试应用程序)<----->(C++ 库(AVFoundation 回调))

测试应用程序具有 UI 控件并负责几乎所有图形。c++ 库通过 OpenGL 将帧渲染到 UIView。

你和我在一起吗?好的


好的,首先,用户按下一个 UIButton 来调用我的库。此调用需要 10 秒或更长时间才能完成。因此,如果我将调用直接放在按钮单击之后,UI 将被阻塞,直到库函数返回:

这不好。我尝试的下一件事是生成一个线程来调用 lib:

这不再阻塞 UI,但现在视频帧回调函数永远不会触发(AVCaptureSession 的 captureOutput)。似乎主 NSRunLoop 已被阻止。

接下来我尝试了同样的事情,但使用了 Grand Central Dispatch:

这具有相同的行为。也就是说,视频帧的回调不会触发。瘸

为什么主 NSRunLoop 在第 2 和第 3 种情况下被阻止?有没有办法将队列与之关联?

这有意义吗?

0 投票
3 回答
2615 浏览

cocoa - aysnchronous NSURLConnections 是多线程的吗

我注意到如果我创建一个 NSURLConnection 并触发请求,一切都很好。在调用连接的代码块完成后,我的委托方法被调用,最后一个委托方法被调用。伟大的。

这让我相信连接是异步的,这意味着它们是多线程的。那是对的吗?它们可以是异步的但在同一个线程中吗?不,这太疯狂了——对吧?

但是,在我看到的每个使用 NSOperation 的示例中,NSURLConnections 总是在 scheduleInRunLoop 之后在 while 循环中调用 [runLoop runMode ...] 。

有人可以准确解释这里发生了什么吗?在我看来,第一种情况需要生成辅助线程,但不需要手动调用运行循环(在那些线程上),而 NSOperation(在新线程中)确实需要手动调用运行循环。

为什么第一种情况不需要手动调用?

0 投票
2 回答
1137 浏览

cocoa - 我应该使用 NSOperation 还是 NSRunLoop?

我正在尝试监视 FireWire 摄像机的视频输出流。我创建了一个带有按钮的 Interface Builder 界面和一个NSImageView. 在无限循环中进行图像监视时,我想:

  • 动态更改一些相机参数(增益、伽马等)
  • 告诉监控停止,以便我可以将图像保存到文件中(设置一个停止 while 循环的标志)

使用按钮功能,我无法循环视频帧监视器,同时仍在寻找按钮按下(很像使用 C 中的按键功能。)出现两个选项:

  1. 启动一个新的运行循环(我无法让自动释放池运行......)
  2. 启动NSOperation- 我如何以允许我连接 Xcode 按钮的方式执行此操作?

该文档对于此类对象的创建非常迟钝。如果我根据我找到的示例创建一个NSOperation,似乎无法与 Interface Builder 中的对象进行通信。当我创建一个NSRunLoop,我得到一个对象泄漏错误,我找不到如何创建一个实际响应我创建的 RunLoop 的自动释放池的示例。没关系,我什至没有尝试选择辅助运行循环对哪些对象进行采样......

因为Objective C(显然!)不是我的母语,所以我正在寻找带有婴儿步骤的解决方案,抱歉......提前致谢

0 投票
0 回答
813 浏览

cocoa - 让基于运行循环的 NSThread 休眠一段不确定的时间

我的 iOS 应用程序中有一个专用的网络线程。线程的 -main 方法如下所示:

我有一个 NSOperationQueue 填充了 http 操作(并发,基于运行循环的 NSOperation 子类)。现在,因为我知道什么时候有 http 操作需要 runloop 线程,所以我希望能够防止 runloop 线程在没有工作要做的时候执行。我在某处读到(有帮助,我知道)NSRunLoop 在没有工作时会自动休眠。但是,我使用 Instruments 的时间分析器并看到 runloop 线程始终处于活动状态。

如何安排我对 NSRunLoop 和 NSThread 的使用以防止这种资源浪费?