问题标签 [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 回答
1794 浏览

iphone - 在 iphone 应用程序中的线程之后调度线程

我想在线程完成后安排一个线程。

是否可以 ?如何?

例如(指定我的需要)

0 投票
1 回答
375 浏览

objective-c - Objective-C 中的 NSThread 错误

我收到此错误

bool _WebTryThreadLock(bool), 0x1b53d0: 试图从主线程或web线程以外的线程获取web lock。这可能是从辅助线程调用 UIKit 的结果。现在崩溃...

这是因为什么?

谢谢

0 投票
2 回答
475 浏览

iphone - UITabBar 外观问题 + NSThreads

尝试将 UITabBar 添加为 AppDelegate 窗口的子视图时遇到问题。上面的链接显示了屏幕混乱状态的屏幕截图。

TabBarInAMessyState.png

结果是不可预测的。在这张图片中,只有 UITabBarItem 的标题受到影响,但有时 TabBar 背景不显示(因此我们可以看到窗口的背景)。有时 NavigationBar 也会受到影响(图中未显示)。

当我启动应用程序时,我首先要检查是否有网络连接,所以它被称为一个方法(verifyNetworkAvailability:),它将在与主线程不同的线程中运行。这样做是为了不冻结应用程序。

我想知道是否可以以这种方式添加 tabBarController.view(通过在主线程以外的线程中完成的方法调用)。

提前致谢

0 投票
2 回答
2040 浏览

uitableview - 线程安全的 NSMutableArray 问题

我正在开发一个 RSS 阅读器,它使用 NSMutableArray ( _stories ) 来存储 RSS Feed 的内容。该数组被应用程序中的两个不同线程使用,并且可以在两种情况下同时访问,因为:

  1. 它是 UITableViewController 的数据源(读取它的内容并向用户显示所需的信息)
  2. XMLParser 使用它(从 Internet 下载内容,解析 XML 数据并将内容添加到其中)。

一些代码如下所示:

在 UITableViewController 类中

在 XMLParser 类中

如果用户想要从 RSS Feed 加载“更多帖子”,我将开始另一个解析操作,将_stories数组作为对解析器的引用,它将其他“帖子”附加到数组中。解析结束时,调用 UITableViewController 方法reloadData,然后更新 UITableView。

如果用户在解析运行时向上/向下滚动 UITableView 怎么办?UITableViewController 是否会尝试同时访问_stories数组(以创建单元格)并可能使应用程序崩溃(它很少发生但会发生)?

我想到了使用 @synchronized 块的想法,但我不太确定我必须把它准确地放在哪里(在代码的许多地方都可以访问_stories数组)。另一个问题是:我必须在哪里处理 @synchronized 块可能引发的异常?这可能会导致大量冗余代码。

我也想在没有“非原子”的情况下使用@property,但我认为它不太适合这个问题。

知道如何解决这个问题吗?提前致谢。

0 投票
1 回答
140 浏览

iphone - NSThreaded 设计中的委派?(苹果手机)

我在我的应用程序中使用了大量非常小的 Web 服务,并且我已经走了几条无法按预期扩展或工作的道路。

我正在考虑的设计方法:viewController 的任务是从一般 webServicesClass 中请求一组数据,这个任务在一个新的 NSThread 中启动 -> 这将实例化一个仅检索 xml 并将其返回给webServicesClass -> webServicesClass 现在实例化一个对象,该对象只能解析来自该特定 Web 服务的一些 XML。然后解析器返回一个不错的 Entity 对象给 webServiceClass。WebserviceClass 现在需要通知 viewController 这个数据。

viewController 实现了一个 webServiceClassDelegate 和一些委托方法,以查看 Web 服务请求是否按计划进行。例如 -(void)aWebserviceFailed 和 -(void)aWebserviceSuccess。

0.5由于运行的WebserviceClass是不同的NSThread,在父对象的主NSThread上调用委托方法会不会有问题?

1.0我认为这个设计是合理的,因为它完全封装了不同类中Entity的检索、解析和返回。但是,我将不得不为每个不同的 Web 服务编写委托方法并在每个步骤中实现委托协议。即从底层开始,WebserviceClass 必须为检索 XML 的对象(start、fail、success)、解析 XML 的对象(start、fail、success)和 WebserviceClass 都实现委托方法。将这些响应中的每一个委托给必须再次实现来自 WebserviceClass 的委托方法(开始、失败、成功)的 viewController。有没有更简单的方法来做到这一点?

我有一些设计模式经验,但不是来自像 Objective C 那样一致地使用委托的语言。在 AS3 或 Java 中,我会有一些事件可以通过对象冒泡并通知正在监听更改的人。在我读过的所有目标示例代码中,我只看到 NSNotifications(相当于 AS3 或 Java 的“事件”)使用了 0.1% 的时间。

我所描述的设计将给我一些可以完美地扩展到许多 Web 服务的东西,并让我完全控制潜在错误/异常发生的位置,但似乎需要大量代码才能获得这种松散耦合。

1.1或者我应该完全接受委托方法并开始工作:)

感谢您提供的任何指示或帮助。我不要求源代码或类似的东西,更多的是“在你刚刚描述的日常情况下,这被认为是 Objective C 中的最佳实践”:)

0 投票
1 回答
1182 浏览

objective-c - NSThread 对象保留了两次?

我有一个派生自的类NSThread

在其他地方(在 C++ 函数内),我创建了一个实例:

我的理解是,retain-count 现在应该是 1。在另一个 C++ 函数中,我想停止并释放线程:

然而该dealloc方法没有被调用。如果我改为:

thendealloc被调用,这意味着保留计数为 2。但它是如何变为 2 的?

请注意,NSThread 仅提及使用时保留的文档detachNewThreadSelector:toTarget:withObject:

0 投票
3 回答
2459 浏览

iphone - 下载时停止 NSThread

我有一个 iPhone 应用程序,我在其中显示一个从 RSS 提要加载的表格视图。加载视图后,我调用此方法在新的 NSThread 中运行:

它工作正常,但是如果用户在下载或解析 xml 时离开视图,我希望线程停止运行,但是如何在不泄漏内存的情况下阻止它运行?此外,如果它正在运行 -initWithContentsOfURL: 方法,而我希望它停止,我将如何停止该方法?

0 投票
3 回答
2426 浏览

iphone - 使用 performSelectorInBackground 运行加载指示器

我有这样的代码:

这工作正常,但我担心线程安全。我没有在第二个线程中分配内存,但 smth 告诉我这太简单了:)

0 投票
1 回答
3687 浏览

iphone - NSAssert 在线程中的使用

我正在尝试在NSAssert整个 iPhone 应用程序中使用,以便如果发生意外情况,应用程序会快速失败并在崩溃日志中显示有意义的消息而崩溃。

如果失败发生NSAssert在主线程上,这可以正常工作,因为NSInternalInconsistencyException默认情况下它会引发未捕获并停止执行。但我也在后台线程中进行处理,在这种情况下NSAssert只是中止线程,但编程继续运行。

我目前的解决方案是在主线程中捕获并重新抛出异常(在本例中为NSOperation'smain方法):

有没有更好的办法?也许使用自定义的 NSAssertionHandler?

我知道我可以将 Cassert与静态注释一起使用:

但这不允许我展示实际失败的价值x是什么。

0 投票
2 回答
1829 浏览

objective-c - Objective-C NSThread 引用计数约定(保留与自动释放)

我的主程序产生一个线程,它执行以下操作:

现在,这对我来说似乎有问题,因为自动释放池可以在选择器 boonk: 完成执行之前释放,这会导致崩溃。

所以,我的下一步自然是:

这绝对是没有错误的,但是....似乎不自然。是否有一个objective-c ref 计数约定或协议来处理这种情况(跨线程无等待发布),或者第二个解决方案是否高于它的完成方式?