问题标签 [nsthread]

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 回答
299 浏览

iphone - 查找所有活动线程

我需要找到一种方法来枚举我所有的 iPhone 应用程序的活动线程。这严格用于调试目的。如果有的话,私有 API 也是受欢迎的。我知道我可以在调试器窗口中看到所有当前线程,但如果可能的话,我希望能够访问实际的 NSThread 对象。

0 投票
1 回答
265 浏览

iphone - NSRunLoop 正在接收一个奇怪的选择器;可能的比赛条件愚蠢?

我有一些线程在做繁重的工作,而我的主线程处理 UI 的东西。线程有时会回调到主线程以更新进度条。

总而言之,它不是那么稳定。我已经解决了与逻辑有关的问题,但特别是一个问题仍然存在。我有一些类似于停止按钮的代码,这意味着线程在下次检查发生的情况时不会尝试更新自身。

有时,当我按下停止按钮时,我会收到此错误:

-[NSRunLoop isEnabled]:无法识别的选择器发送到实例...

如果我在线程工作阶段结束时按下停止按钮,似乎会发生这种情况。在此期间,它并没有做太多事情,除了:

  • 释放一些 OpenGL 内存
  • 在主线程上调用 final 方法
  • 耗尽其自动释放池
  • 并返回

但坦率地说,错误信息太神秘了,我什至不知道从哪里开始。任何人都可以对 NSRunLoop 有所了解,这个“isEnabled”方法可能是什么,或者对可能出现的问题进行一般性的刺探?

0 投票
2 回答
181 浏览

objective-c - NSLog'ing 是否会改变其保留计数?因为我在这里慢慢地发疯

除了这个问题:NSRunLoop 正在接收一个奇怪的选择器;可能的比赛条件愚蠢?- 在发现 UIGestureRecognizer 正在被释放并收到一条消息的地方,我打印了我的一个 GR 的地址,以查看它是否是僵尸报告的那个。

使用代码中的打印消息,我不能再导致我最初寻找的崩溃。删除打印消息,看来我可以再次导致它。

由于我们正在处理释放/保留/释放问题,任何人都可以告诉我是否有可能打印出这个对象导致它被引用,从而避免它被释放?如果是这样,这告诉我我原来的问题是什么?发布的太多了?发布太早?

0 投票
1 回答
367 浏览

objective-c - NSInvocation 泄漏

我正在尝试设置 NSInovcation 系统以使用 performSelectorInBackground 将选择器启动到后台线程中: - 到目前为止,在实例方法 (-) 上运行系统时一切都成功,但我也想支持类方法 (+)。我已经调整了我的代码,为这两种类型的类提供了一个 invokeInBackgroundThread,除了一个问题之外,一切正常。当调用类方法时,我的控制台充斥着“autoreleased with no pool in place”消息。不知道是什么原因造成的。基于 DDFoundation 开源项目的代码如下所示。




0 投票
1 回答
1272 浏览

iphone - 在后台调用委托的方法

这是我在这里的第一个问题,如果我犯了任何错误,请原谅!

在我的 iPhone 项目中,我有一个在线程中运行的方法需要很长时间才能执行(这就是它在线程中运行的原因)。

我的目标是通知调用此方法的 ViewController 此方法中的任何进展。这就是我将 ViewController 设置为类的委托的原因。

现在在昂贵的方法中,我执行以下操作:

但不幸的是,这不起作用,因为(我认为)我在后台线程中。

如何通过异步执行的方法通知委托任何更改?

0 投票
1 回答
583 浏览

iphone - 在后台加载一个 OpenGL 视图。苹果手机

我有一个渲染 3D 模型的 OpenGL 视图。它是对苹果 EAGLView 的基本修改。此视图被添加到控制器的 .view 中并使用 presentModalViewController: 显示。在用户选择显示视图之前,我想在应用程序启动时在后台线程中完成所有模型加载和 OpenGL 状态配置。这可能吗?我可以加载纹理、设置照明,并且通常只是准备好在后台线程中渲染所有内容吗?我担心的是,当我在后台设置渲染器时,主应用程序的 Cocoa 触摸部分会操纵 OpenGL 状态。当然,控制器将从主线程显示。对 OpenGl-ES 的这种理解程度不是我经常处理的事情,所以如果我的问题有任何奇怪之处,请保持谦逊 :)

0 投票
2 回答
2572 浏览

objective-c - 死锁:你如何确定一个调用是否会导致 iOS 主线程的不安全绘制?

绘图/绘画应始终在 GUI 线程上完成,否则可能会发生死锁!...

你如何确定一个调用是否会导致 iOS 主线程的不安全绘制?

问题是我们得到了这样的堆栈,它们不在主线程上......

你怎么知道你是否会导致这个?当你做错事时,是否有任何调试技巧或其他技术来提醒自己。

0 投票
5 回答
224 浏览

iphone - NSThreading 提高速度

我正在开发游戏模拟游戏,并希望加快比赛模拟速度。在给定日期,可能有 50 多个匹配项需要模拟。目前我遍历每个并告诉他们模拟自己,但这可能需要很长时间。我希望

1)覆盖一个“忙碌”的屏幕

2)为每个启动一个线程

3)当最后一个线程退出时,移除覆盖层。

现在我可以做 1 和 2,但我不知道如何判断最后一个线程何时完成,因为我分离的最后一个线程可能不是最后一个线程完成。最好的方法是什么?

此外,通常使用线程以便在用户执行其他操作时可以在后台完成工作,我使用它略有不同。我的应用程序是一个核心数据应用程序,我想避免用户在模拟比赛时以其他方式接触商店。所以我大部分时间都想要单线程,但是由于 sim 引擎需要多长时间,所以在这种情况下使用多线程。如果有人对这种方法有其他想法,我很开放。

0 投票
0 回答
477 浏览

iphone - iPhone 在新线程中上传

我一直在尝试在我的应用程序中实现一个后台线程来执行长途、硬移植上传的东西。

我正在使用 FBConnect SDK,它一直运行良好,但我想保持 GUI 端顺利运行,目前应用程序在开始上传之前有明显的暂停。

目前发生的事情是我将上传作业添加到队列中,然后运行“startQueue”。

这会从队列中取出第一个作业,调整图像大小并开始上传到 Facebook。

只有在发出 URL 请求时,它才开始在自己的线程中运行,并且我重新获得了 GUI 的控制权。

我想要的是能够将作业添加到队列中,然后在单独的线程中运行“startQueue”。这将立即让我重新控制 GUI。

发生的事情是我立即取回 GUI,图像在新线程中调整大小)并且 Facebook 上传开始(也在新线程中),但随后什么也没有。

在这个子线程中可以做什么和不可以做什么有某种限制吗?不允许 URL 连接吗?电话上似乎没有任何错误,我可以毫无问题地继续将作业添加到队列中,但初始上传没有完成。

init 方法创建线程...

然后添加作业方法启动它......

然后这样运行......

不使用线程(即只运行 startJob)它一切正常。当我调用 bgThread start 时,它运行完美,我得到了 Facebook NSLog,但工作永远不会完成。它甚至没有以错误结束。

感谢您提供的任何指示或提示!

奥利弗

0 投票
3 回答
791 浏览

iphone - 可可中的 NSRunLoops?

假设我有 2 个线程,一个是主线程,另一个是辅助线程。主线程使用最多,但有时(很少)我希望辅助线程根据来自主线程的调用做一些工作。大多数时候辅助线程应该休眠。现在经过一番搜索,我明白做到这一点的方法是使用 runLoops。所以我尝试阅读苹果的文档(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW5 )

但在我看来它非常复杂,我在那里度过了一段艰难的时光。有没有一种优雅而简单的方法来实现我所描述的?我可以运行和玩任何类似的 runLoop 代码示例吗?

谢谢