iOS面试:主线程如何进行阻塞?

本文讨论了在iOS开发中如何避免主线程阻塞,尤其是在等待网络请求回调时。文中提出了两种方法:使用block回调重写部分逻辑,以及理解GCD中async和sync在主线程上的行为。通过分析同步队列和异步队列的工作原理,解释了主线程异步调用不会开辟新线程,而sync调用会在当前线程上阻塞。同时提醒开发者避免在主线程上使用可能导致阻塞的操作,以防止界面卡死。
摘要由CSDN通过智能技术生成

前言:

今天在群里, 有个小伙伴问了一个问题, 他们和js交互的时候, 需要等待js的一个回调.

主线程调用一个网络请求, 然后要等网络请求的结果回来之后, 然后在return.

他说, 他们之前是根据runloop去回调添加监听解决的.说又引发了一些其他的问题, 问有没有人知道怎么做.

解决

我一直以为这应该是大部分都知道的, 直到他用runloop解决, 很多人都在群里讨论说没法实现, 我才意识到或许并不是那么简单.

方法一

如果你实在是不知道怎么解决, 那么就把return去掉换成block回调, 然后进行调用. 当然这可能会让你去重写一部分逻辑代码, 但是解决起来算是好用的.

方法二

就是在主线程做堵塞.那么问题来了

  • 主线程可不可以做阻塞?
  • 主线程调用async会不会开辟新线程?

主线程调用async会不会开辟新线程?

先说一个基础的async不管是同步队列, 还是异步队列, 调用async都会开辟线程, 但是区别是什么呢? 主线程async会吗?

在这里插入图片描述
建议先把图片放大, 自己思考一下会输出什么.

**1--
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值