gpt4 book ai didi

iOS 在后台线程上访问 UIScreen

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:54:14 25 4
gpt4 key购买 nike

我有一个方法负责加载有关事件的详细信息(查询 sqlite 数据库中的标题、描述、缩略图路径等),因为我需要为大量事件调用它,所以我正在调度使用 Grand Central Dispatch 到后台线程。

问题是我收到 UIKit 线程异常(让我知道我正在主线程以外的线程上运行 UI 方法,导致应用程序崩溃)。我根本没有更改 UI,所以这几乎不可能找到,但我最终将其缩小到一行代码:

bool retina = (UIScreen.MainScreen.Scale > 1.0);

我正在使用 UIScreen 来确定设备是否有视网膜屏幕(以确定缩略图图像路径是否应该在末尾附加“@2x”)并且只是访问它(看起来是静态变量)抛出UIKit 异常。

是否有解决方法来确定屏幕是否是不使用 UIKit 的视网膜屏幕(或者后台线程安全),或者是否有更好的方法来解决这个问题?

注意:我正在使用 Xamarin (C#) 创建应用程序,但 swift 中的任何答案都非常好并且易​​于转换。

最佳答案

首先,您不必在打开仅显示在屏幕上的图像时指定 @2。 iOS 使用 UIImage(named: "BaseName") 选择正确的版本。

但是如果你需要的话,这里是你的 Swift 代码:

func isRetina() -> Bool
{
var scale: CGFloat = 0.0
DispatchQueue.main.sync
{
scale = UIScreen.main.scale
}

return scale > 1.0
}

因为你在很多地方使用它,考虑把它放在一些实用程序/基类中。

关于iOS 在后台线程上访问 UIScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379966/

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