问题标签 [cfrunloop]

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 投票
1 回答
328 浏览

ios - 在 nsoperation 内部使用 Runloop 执行异步任务

我有一个用例,我需要使用 NSURLSession 下载许多文件。

为了防止 sessiontasks 超时,我需要将它们放在操作队列中并限制并发下载量,这样它们就不会饿死。

我的想法是将任务恢复加载到 nsoperation 中,并将它们加载到 nsoperationqueue 中,这将限制并发活动的数量。

问题是当我调用 [task resume] 时,代码将退出并且 nsoperation 将认为自己完成,即使我正在等待文件完成下载。

这是一些代码。

在等待回调时如何保持 nsoperation 线程处于活动状态?我也尝试过使用 nsrunloop 并向 NSMachPort 添加一个端口。这似乎没有帮助。

此外,在 NSURLSession 上设置 HttpMaximumConnectionsPerHost 也无济于事,因为超时计时器在我恢复任务时开始。这意味着我将获得比以前更多的超时。

0 投票
1 回答
181 浏览

cocoa - NSUndoManager.groupsByEvent 如何判断当前运行循环是否通过?

我想了解/复制“按运行循环传递/循环分组”功能NSUndoManger

NSUndoManager在同一个运行循环循环中多次调用时,可以将多个调用组合registerUndo()成一个“撤消”操作。这是由 确定的NSUndoManager.groupsByEvent,默认情况下设置为true

所以是这样的:

...产生一个撤消组,然后单击编辑 → 撤消一次还原两个更改。

不知何故,NSUndoManager 可以确定两个调用registerUndo()是否在同一个运行循环周期中。这是如何运作的?

我的用例:

我有在用户与 UI 交互(例如单击按钮)后发送属性更改通知的代码。作为用户操作的结果,可以有一个或多个事件。我想将它们分组并在当前运行循环结束时只更新一次 UI。

0 投票
1 回答
1767 浏览

ios - iOS 11.2 CFRunLoopServiceMachPort 的应用程序崩溃

我的应用程序发生了一些 CFRunLoopServiceMachPort 崩溃。我一直在试图找出造成这种情况的根本原因。

我在后台线程中执行了一些任务,以避免主线程拥塞。我想这可能有一些影响。

老实说,我不明白我的问题在哪里。

以下是我的崩溃日志:

0 投票
0 回答
134 浏览

ios - 为什么 CFRunLoopActivity 在 iOS 和 MacOS 中的行为不同?

我在iOS和macOSX两个平台上用同样的代码测试,查看Runloop的activity switch,发现两个平台的结果不一样,是什么原因.s

代码:

1.创建RunLoop Observer

2.打印活动状态

结果:

1.iOS iOS结果

2.macOS MacOS结果

为什么macOS系统中有多个kCFRunLoopEntry?

0 投票
0 回答
290 浏览

memory-leaks - 在 Mac 上调用 CFNetworkExecuteProxyAutoConfigurationURL 时泄漏

我正在使用 CFNetwork API 来检测操作系统代理设置。我的设置很大程度上基于此: https ://github.com/adobe/chromium/blob/master/net/proxy/proxy_resolver_mac.cc 这与此几乎相同: https ://developer.apple.com/ library/archive/samplecode/CFProxySupportTool/Introduction/Intro.html

我使用 CFNetworkCopyProxiesForURL 来获取代理列表,对于 PAC 类型,使用 CFNetworkExecuteProxyAutoConfigurationURL 来获取并执行 PAC 脚本,立即在当前线程上运行 run loop,这已经不在 ui 线程上。

这一切都正常工作,我仔细梳理了确保我遵循创建规则以正确发布结果。但是,在使用 Xcode 工具时,我看到 std::shared_ptrs 到 PAC::PACClient 被 _CFNetworkExecuteProxyAutoConfigurationURLDelegated 泄露。由于该对象从未暴露给我,我不确定如何控制它的释放,但它正在泄漏。这只是获取 PAC 文件的问题,显式代理不会泄漏。我已经尝试在所有 CFDictionaries 上添加冗余的 CFRelease 调用,并且向我展示了这些调用是否被过度保留,但这对 PACClient 泄漏没有影响。

这是在 Mac 上的一个 cpp 文件中,而不是目标 C,在一个启用了 ARC 的项目中。

有没有人遇到过这种泄漏并知道如何防止它?

下面是执行查找的代码片段,与上述项目中的所有步骤相同。

0 投票
0 回答
140 浏览

macos - Macos 应用程序在使用 NSDistributedNotificationCenter 和 CFRunLoopAddSource 时挂起

我有使用 Qt 构建的 MacOS 应用程序。在那里,我创建了 NSDistributedNotificationCenter 以在可访问性设置更改时收到通知(观察“com.apple.accessibility.api”)。我也有 CFRunLoopAddSource 来监控按键事件。

但是,当我运行程序并更改辅助功能时,应用程序挂起并且无法正常运行。

有人可以帮忙看看为什么会这样吗?

这是代码:

在这里我正在创建观察者:创建/删除由按钮单击控制

这就是我添加关键事件记录器的方式:

请问有什么想法吗?

提前致谢和问候

0 投票
0 回答
25 浏览

macos - 自定义 runloop 上的 NetworkExtension API 调用

我正在使用 Apple 的 NetworkExtension 框架开发一个应用程序,该框架应该进行一些基本的网络流量过滤。但是,我发现使用网络扩展 API 存在问题。应用程序本身正在使用 kevents 在自定义运行循环实现上运行,这似乎是问题的原因。我尝试创建基于 Cocoa 的简单应用程序,该应用程序在内部使用 CFRunLoop 并且一切都可以正常工作。另一方面,当我尝试使用 API 创建简单的命令行应用程序时,也无法正常工作,这是可以理解的,因为那里没有运行循环。这个问题有一些解决方法吗?