gpt4 book ai didi

NSOperation:在主线程中添加 subview 和慢

转载 作者:行者123 更新时间:2023-12-04 19:15:17 25 4
gpt4 key购买 nike

我已经实现了以下 NSOperation,绘制 N自定义 View

- (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];
}
}

因此,当绘制所有 View 时,委托(delegate)会收到通知。

问题是在“操作完成”日志之后,我需要大约 5 秒才能看到第一个“绘制”日志。

为什么会这样?一般来说,我应该如何表现才能找出哪一行代码正在执行这么多时间?

- - - 编辑 - - -

有时(比如 10 次中的 1 次)我会因为不应该调用 addsubview 而导致崩溃。来自 NSOperation,因为它不是线程安全的。所以我把它改成:
[delegate.view  performSelectorOnMainThread:@selector(addSubview:) withObject:customView waitUntilDone:NO];

现在我没有崩溃了,但是这个过程需要很长时间才能执行!比以前多了5倍。

为什么这么慢?

最佳答案

为了让事情正常工作,我们需要忘记 NSOperation 并使用这个“技巧”

dispatch_queue_t main_queue = dispatch_get_main_queue();
dispatch_async(main_queue, ^{

[self createCustomViews];

dispatch_async(main_queue, ^{

[self addAnotherCustomViewToView];

});
});

关于NSOperation:在主线程中添加 subview 和慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10487809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com