multithreading - 从后台线程更新 NSTableView 数据源

标签 multithreading cocoa nstableview

将后台线程频繁更新的数据源与 GUI 主线程同步的最佳方法是什么?

我应该在每个方法调用周围放置一个 pthread 互斥体吗? 这对我来说似乎也很重。

编辑:我正在寻找 10.5 解决方案

最佳答案

您始终可以在主线程上更新模型和 TableView 。 NSObject 中有像performSelectorOnMainThread:withObject:waitUntilDone:这样的函数,可以让你轻松地在主线程上执行函数调用。所以你可以用以下方法更新你的模型:

[model performSelectorOnMainThread:@selector(addObject:) withObject:newObject waitUntilDone:YES];

然后,用以下内容更新您的表格 View :

[tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

如果您需要传递多个对象,事情会变得更加复杂,因为这样您就需要使用调用,但我发现这些函数大多数时候都可以使用。

关于multithreading - 从后台线程更新 NSTableView 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3906322/

相关文章:

java - Spring取消@Async任务

c++ - 多线程暴力和递归多维循环。其他方式?

objective-c - 复制 Yosemite 上的 Finder 选择背景?

objective-c - NSTableView 如何通过绑定(bind)修改 NSArrayController 的选择?

macos - 当图像插入一行时,NSTextField 在 NSTableView 中变得模糊

macos - 启用 "Use keyboard navigation"会导致 NSTableView 困惑

Java 线程和垃圾收集器

java - 在单独线程上刷新 Gui

cocoa - NSArrayController 和 KVO

cocoa - NSButton - 自定义形状按钮的点击测试翻转/悬停