cuốn sách gpt4 ai đã làm

ios - 在主队列上更改 View Controller 布局的最快方式?

In lại Tác giả: Walker 123 更新时间:2023-11-28 07:17:23 25 4
mua khóa gpt4 Nike

我有一个进行 web 服务 API 调用的 dataTask,在该 dataTask 的完成 block 中,我使用返回的信息构建 UIImageView 并将其添加为父 UIViewController 的 subview 。我已经尝试了两个 API 调用,我想知道为什么一个会导致 UIImageView 的显示速度比另一个慢得多。在完成 block 内部,不到 1 秒的快速调用是:

dispatch_async(dispatch_get_main_queue(), {
(self.delegate as TBGQRCodeViewController).displayQRCode(receiveAddr, withAmountInBTC:amountBTC)
});

而较慢的调用(大约需要 13 秒)是:

(self.delegate as TBGQRCodeViewController).displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

第一个显然在主队列上运行,但我不太确定第二个,因为它直接在 dataTask 的完成 block 中运行。

有人可以详细解释为什么同一函数的这两个调用具有如此明显不同的运行长度吗?

câu trả lời hay nhất

当这些调用更新 UI 时,您的第一个调用是在 main thread 上,它会立即更新您的 imageView。但是您的第二个调用直接在 dataTask 完成处理程序中进行,通常在辅助线程运行循环所以这个调用

(self.delegate as TBGQRCodeViewController).displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

hiện hữu secondary thread runloop 上运行,因此它将无法更新 UI。当其他一些调用或其他事件重新加载 UIImageView 时,它会显示您计算出的 hình ảnh 以显示在 UIImageView 上。

因此,如果您的调用直接在完成处理程序中,那么 dataTask 会在辅助线程上获取数据,而不是在辅助线程上更新您的 imageView,这不应该像所有 UI 那样完成必须在 main thread 上更新。将 imageView 更新放在 main thread 上。

关于ios - 在主队列上更改 View Controller 布局的最快方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987746/

25 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress