gpt4 book ai didi

ios - 添加为 subview 后在 GCD 全局队列中创建的 UIView 奇怪行为

转载 作者:行者123 更新时间:2023-11-28 22:48:44 24 4
gpt4 key购买 nike

我正在创建一些 UIView 并出于对手头问题并不重要的原因缓存它们。

在我将 View X 作为 subview 添加到 Y 之后,X 的一个 subview 没有出现。如果我等 20-30 秒,它就会突然出现。

以下是我创建 View 并将它们添加到缓存的方式。这些 View 尚未添加到用户界面,稍后会发生。

dispatch_async(dispatch_get_global_queue(0, 0), ^{

for(int i = 0; i < 10;i++){
MyUIView *cTemp = [[MyUIView alloc] initWithFrame:CGRectZero];
[self addViewToCahce:cTemp forKey:@"key"];

}

});

但是,如果我删除 dispatch_async,它就会按预期显示。任何人都知道这里发生了什么或如何防止这种异常行为?

最佳答案

切勿在主线程之外修改 UI。与大多数 UI 框架一样,Cocoa 不是多线程的。请尝试以下操作:

dispatch_async(dispatch_get_global_queue(0, 0), ^{
// Do whatever processing you want to do here
dispatch_async(dispatch_get_main_queue(), ^{
for(int i = 0; i < 10;i++){
MyUIView *cTemp = [[MyUIView alloc] initWithFrame:CGRectZero];
[self addViewToCahce:cTemp forKey:@"key"];

}
});
});

至于为什么您会遇到您所描述的行为,我只能推测。我不相信 UIView 的构造函数是线程安全的。如果您需要在另一个线程中创建 View ,我建议尽可能重构代码。

关于ios - 添加为 subview 后在 GCD 全局队列中创建的 UIView 奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517551/

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