我已经实现了以下 NSOperation 来绘制N
自定义视图
- (void)main {
for (int i=0; i<N; i++) {
<< Alloc and configure customView #i >>
//(customView is a UIView with some drawing code in drawrect)
[delegate.view addSubview:customView];
}
NSLog(@"Operation completed");
}
在我有的 customView 的 drawRect 方法中
- (void)drawRect {
<<Drawing code>>
NSLog(@"Drawed");
delegate.drawedViews++;
if (delegate.drawedViews==VIEWS_NUMBER) {
[delegate allViewsDrawn];
}
}
因此,当绘制所有视图时,委托会收到通知。
问题是在“操作完成”日志之后,我需要大约 5 秒才能看到第一个“绘制”日志。
为什么会这样?一般来说,我应该如何表现才能找出哪一行代码正在执行这么多时间?
- - - 编辑 - - -
有时(例如十分之 1)我这样做时会崩溃,因为我不应该addsubview
从 NSOperation 调用,因为它不是线程安全的。所以我把它改成:
[delegate.view performSelectorOnMainThread:@selector(addSubview:) withObject:customView waitUntilDone:NO];
现在我没有崩溃了,但是这个过程需要很长时间才能执行!比以前多了5倍。
为什么这么慢?