MacOS和iOS开发中异步调用与多线程的区别

本文探讨了在MacOS和iOS开发中异步调用与多线程的区别。异步调用可以在同一或不同线程中进行,而多线程涉及到线程间的并行执行。主要通过示例代码展示了异步调用如何在run loop中工作,以及在多线程环境中如何影响任务执行。强调了在更新UI时必须在主线程的run loop中进行。文章还提供了一种简单的多线程实现方式,展示了线程间任务执行的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多童鞋可能对Apple开发中的异步调用和多线程的区别不是太清楚,这里本猫将用一些简单的示例来展示一下它们到底直观上有神马不同.

首先异步调用可以在同一个线程中,也可以在多个不同的线程中.每个线程都有一个run loop,主线程的运行环称为main run loop,所有和UI界面有关的操作必须在主运行环中完成.在run loop中线程将会轮询消息源发出的消息.比如在MacOS中鼠标就是一个消息源,鼠标按下就会给系统中相关线程的消息环发送消息;而在iOS中手势操作也是一个消息源,当对应的手势出现时,也会给有关线程的run loop发送消息.

run loop接收到消息源发送的消息后会发生什么呢?它会调用之前设置好的消息回调方法,比如手势操作对象会在创建时设置一个回调闭包.在手势消息送达运行环时,就会调用这个闭包.这就是异步调用的一种典型的使用方法.

异步调用不立即返回值,而是等到某个特定的时机再完成特定的调用.值得注意的是,正如前面强调过的那样,如果你在多线程中使用异步调用视图更新用户界面,你必须将实际updateUI的代码放到main run loop中执行,否则没有效果.

下面先看一下异步调用的示例代码,必须在Xcode8.0beta的playground中测试,因为是Swift 3.0的语法:

import UIKit

@objc class Time:NSObject{
    @objc(one:)
    func one(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值