【发布时间】:2015-05-11 14:49:35
【问题描述】:
我有一个后台线程,它运行并修改对象内NSMutableArray 的内容。这需要很长时间(几个小时)才能运行,并且我希望定期在 drawRect 的 NSView 中绘制数组的内容,以检查进度并查看中间结果。
我的对象有一个协议,其方法名为:didChange:
// How I start my background thread
[self performSelectorInBackground:@selector(startProcessing) withObject:nil];
- (void)startProcessing {
myObject.delegate = self;
[myObject start];
}
// My protocol implementation
- (void)myObjectDidChange:(myObjectClass *)sender {
[myView setNeedsDisplay:YES];
}
// My View's drawRect (pseudo code)
- (void)drawRect {
[myObject drawInContext:context];
}
所有作品,除了支持所有这一切的NSMutableArray 在绘图发生时被更改。我该怎么做?在进行更新时,我是否会以某种方式暂停后台线程中的处理?
编辑:这是我正在绘制的那种显示(虽然要复杂得多):
任何帮助表示赞赏。
【问题讨论】:
-
如果它是一个数组,那么使用 tableview 听起来是正确的选择。
-
我正在绘制一个带有连接的节点矩阵。所以我需要画出它所代表的东西,而不仅仅是显示一个列表。
-
我会添加一张图片,让您了解我在画什么。
-
阵列有多大?当被要求避免突变问题时,您能否返回不可变副本?
-
您是否尝试过制作数组
atomic?这样,您将在另一个线程更改其中的某些内容之前或之后获得该数组,但这绝对是一个可行的对象...... @bbum 对此有一个很好的解释:stackoverflow.com/a/589392/2242359
标签: objective-c background-process osx-yosemite drawrect