OStack程序员社区-中国程序员成长平台

标题: ios - 使用 GCD 在后台创建 UIKit 对象是一种不好的做法吗? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 03:51
标题: ios - 使用 GCD 在后台创建 UIKit 对象是一种不好的做法吗?

正如 bbum 所指出的那样here , 文档说:“在大多数情况下,UIKit 类只能从应用程序的主线程中使用。对于派生类 UIResponder 尤其如此,或者以任何方式涉及对应用程序用户界面的操作。 "。

我以为我明白绘图的方法不能在后台线程中调用,所以可以在后台进行创建,因为drawRect方法只有在添加 View 时才会调用。但也许我错了。

总之,这种代码有风险吗?

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

            dispatch_async(queue, ^{

                NSString *fileName = [pathToModel  stringByAppendingPathComponent:[[compDico valueForKey"fileName"] lastPathComponent]];

                UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:
                                                                             fileName]];
                UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(10, 62, 190, 20)];
                [label setText:[[someArray objectAtIndex:i-1] someText]];
                [label setNumberOfLines:0];
                label.font=[UIFont fontWithName"arial" size:10.0f];
                [label setBackgroundColor:[UIColor clearColor]];

                // Create some other view here
                // ...

                dispatch_async(dispatch_get_main_queue(), ^{
                    [self.view addSubview:imageView];
                    [self.view addSubview:label];
                    //Add other view here
                    // ...
                });
            });

提前感谢您的回复!



Best Answer-推荐答案


是的,这是有风险的。风险有多大,只有 Apple 开发人员才能说。

如果文档说“不要使用它”,那就不要使用它。

请注意,许多 UI 对象可以(并且确实)使用共享资源。如果您在后台线程中使用它们,您将获得共享资源的竞争条件,并且任何事情都可能发生。

关于ios - 使用 GCD 在后台创建 UIKit 对象是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18476540/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4