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

iphone - 将 Object 传递给 NSThread 并继续向其发送消息?

我可以找到有关 NSThreads 的所有示例/教程,我处理它们的唯一方法是[NSThread detachNewThreadSelector:@selector(processDataMethod) toTarget:self withObject:nil];将方法中的所有处理移动到另一个拥有自己的 autoreleasePool 等的线程。

这对于应该执行并“消失”的“一次性”操作很有用。

我必须突发进行许多小型 Web 服务调用,并且我想创建一个在应用程序运行期间一直存在的 NSThread 对象。主要是为了防止在爆发时产生许多新线程。

我看了看,initWithTarget[NSThread start]似乎与我正在尝试做的事情有关。我只是不确定如何将它放在一起,线程是否进入我的对象,我是否将对象传递给我的线程等。

以伪代码/解释方式,我试图实现这一点:

我一直在摆弄如何使它工作,但意识到我对这个主题的理解不够好,无法想出一个“模式”来实现它。我想我正在尝试在一个单独的连续线程中的对象上实现一组方法调用,而不是每次我需要调用一个特定方法时都生成一个线程(可能在 500 毫秒内连续 8 次。然后不在2 分钟)。

我希望这是有道理的,并且在线程方面更有经验的人可以为我指明正确的方向。


这篇文章非常接近我尝试过的内容:如何使用 performSelect...

0 投票
1 回答
946 浏览

iphone - NSOperations 或 NSThread 用于连续相互取消的较小任务的爆发?

我想看看我是否可以针对 Web 服务进行“键入时搜索”实现,该实现已经优化到足以在 iPhone 上运行。

这个想法是用户开始输入一个单词;“Foo”,在每个新字母之后我等待 XXX 毫秒。看看他们是否输入了另一个字母,如果没有,我使用这个词作为参数调用 Web 服务。

Web 服务调用和结果的后续解析我想移到不同的线程。

我写了一个简单的 SearchWebService 类,它只有一个公共方法: - (void) searchFor:(NSString*) str;

此方法测试搜索是否已在进行中(用户在键入时有 XXX 毫秒延迟),随后停止该搜索并开始新的搜索。当结果准备好时,调用委托方法:

我不知道如何让这个功能“线程化”。如果我每次用户有 XXX 毫秒时都不断产生新线程。打字延迟我最终陷入了一个有很多线程的不好的地方,特别是因为我不需要任何其他搜索,但最后一个。我没有连续产生线程,而是尝试通过以下方式使一个线程始终在后台运行:

但我不知道如何访问“searchObj”对象中的“searchFor”方法,所以上面的代码工作并继续运行。我只是无法发送消息searchObj或检索resultReady对象?

希望有人能指出我正确的方向,线程让我感到悲伤:) 谢谢。

0 投票
2 回答
929 浏览

iphone - 我的 @synchronized 块有什么问题?

我的应用程序中有 2 个线程,一个游戏更新线程和渲染/IO/主线程。我的更新线程更新游戏状态,渲染线程根据游戏状态模型的更新值和存储在对象 (gameEngine) 中的一些其他变量来渲染场景。

渲染线程在游戏线程仍在更新时执行,这是一个问题,所以在我看来解决方案是像这样使用@synchronized:

-update但是渲染线程仍然在块的最后 3 行之间访问 gameEngine 对象。为什么是这样?

0 投票
0 回答
254 浏览

iphone - 很奇怪的线程错误信息

我试图将一个方法放在后台的单独线程中。它几乎可以工作,只是偶尔我会收到很多错误消息

拼写错误等等。

有谁知道这意味着什么?有趣的是,线程运行

更具体地说:我通过调用后台进程

方法是

答:错误信息来自wax-iPhone。它首先检查它运行的是哪个线程。(蜡实例.h 第 337 行)

0 投票
1 回答
273 浏览

iphone - 新线程上的 XML 解析

在我的应用程序中,我想在用户滚动 tableview 并拉下第一个单元格后获取新的 xml 数据。由于数据是按时间顺序加载到 tableview 中的,因此更新的数据将显示在第一个单元格之前。

我想在新线程上运行这个过程,那么最好的选择是什么:

  1. 子类 NSThread 并使用它的实例

  2. 子类 NSOperation 并使用它的实例

  3. 直接使用 NSThread 方法

提前谢谢。

0 投票
2 回答
288 浏览

iphone - NSThread 过早终止

我有一个应用程序可以通过 Mac/iPhone 的 GData ObjC 客户端上传到 Google 电子表格。它按原样工作正常。我正在尝试在自己的线程上获取上传部分,并尝试在新线程上调用上传方法。

看:

如果我忘记使用单独的线程,一切都会按预期进行。我是线程编程的新手,所以如果我遗漏了什么,请告诉我!

谢谢!

0 投票
1 回答
1419 浏览

xcode - xcode 在后台进程中加载​​图像,当我快速滚动 tableview 时会导致应用程序崩溃?

我已经开发了一个从远程位置检索信息的应用程序......所以我把它们放在 UITableView 的部分中。作为回应,我也将获取图像......为此,我放置了后台进程(仅适用于图像......因为应用程序将花费更多时间来检索图像而不是基于文本的信息..)。它工作正常...但是如果我在加载图像时滚动 tableview..它将崩溃。

崩溃日志:

试图从除主线程或 web 线程之外的线程获取 web lock。这可能是从辅助线程调用 UIKit 的结果。现在崩溃...

请提供其代码以改进答案..

谁能有这个解决方案..请让我知道..如何解决这个崩溃...即使我为此使用了 NSThread 类..但我没有得到解决方案...

0 投票
1 回答
1410 浏览

iphone - IconDownloader,延迟下载问题

我的问题描述起来很简单,但似乎很难解决。IconDownloader.m问题是加载图标,使用Apple 官方示例提供的自定义类,如果我释放视图,可以避免崩溃。

我已经将该IconDownloader类添加到我的应用程序中,但很明显,只有当 tableview 是根时,这种方法才有效。最大的问题是当视图不是根视图时。Fe:如果我开始滚动我的第二个视图(应用程序现在加载图标)并且没有时间完成下载,我回到根目录,应用程序崩溃,因为必须用新图标更新视图不存在了。

一种可能的解决方案是OperationQueue在视图中实现一个,但是通过这种方法,我必须在更改视图时停止队列,并在我回来时重新启动它,拥有 N 个队列的想法不会让我充满热情。

有人找到解决这个问题的好方法吗?

0 投票
2 回答
1494 浏览

cocoa - NSTask 可以安全地在主线程之外使用吗?

昨天我在某处读到 NSTask 不是线程安全的,这让我很困扰,因为我在 NSThread 中运行 NSTask 并且到目前为止还没有遇到任何线程问题。

我的代码是这样组织的

如果 NSTask 应该只在主线程中使用,那么我正在考虑将 NSTask 启动/停止代码移动到主线程,以防止可能的线程问题。

NSTask 可以在主线程外使用吗?

如果不是,那么 NSTask 的线程问题可能是什么?

0 投票
2 回答
13357 浏览

iphone - NSThread 与 NSOperationQueue 与 ??? 在 iPhone 上

目前我正在使用NSThread在另一个线程中缓存图像。

交替:

或者,我可以使用NSOperationQueue

有什么理由放弃NSThread吗?GCD 是为 iPhone 发布的第四个选项,但除非有显着的性能提升,否则我宁愿坚持在大多数平台上都可以使用的方法。


根据@Jon-Eric 的建议,我采用了NSOperationQueue/NSOperation子类解决方案。它工作得很好。该类NSOperation足够灵活,您可以根据需要将其与调用、块或自定义子类一起使用。无论您如何创建您的NSOperation,您都可以在准备好运行它时将其放入操作队列中。这些操作既可以作为放入队列的对象,也可以作为独立的异步方法运行,如果需要的话。由于您可以轻松地同步运行自定义操作方法,因此测试非常容易。

自从我提出这个问题以来,我已经在几个项目中使用了同样的技术,我对它保持我的代码和测试干净、有条理和愉快的异步方式感到非常满意。

A++++++++++++ 将再次子类化