刚刚,阿里开源 iOS 协程开发框架 coobjc!( 七 )
上述第三种和第四种只是能过做到跳转 , 但是没法保存调用栈上的状态 , 看起来基本上不能算是实现了协程 , 只能算做做demo , 第五种除非官方支持 , 否则自行改写编译器通用性很差 。 而第一种方案的 ucontext 在iOS上是废弃了的 , 不能使用 。 那么我们使用的是第二种方案 , 自己用汇编模拟一下 ucontext 。
模拟ucontext的核心是通过getContext和setContext实现保存和恢复调用栈 。 需要熟悉不同CPU架构下的调用约定(Calling Convention). 汇编实现就是要针对不同cpu实现一套 , 我们目前实现了 armv7、arm64、i386、x86_64 , 支持iPhone真机和模拟器 。
Show me the code
说了这么多 , 还是看看代码吧 , 我们从一个简单的网络请求加载图片功能来看看coobjc到底是如何使用的 。
下面是最普通的网络请求的写法:
下面是使用coobjc库协程化改造后的代码:
原本需要20行的代码 , 通过coobjc协程化改造后 , 减少了一半 , 整个代码逻辑和可读性都更加好 , 这就是coobjc强大的能力 , 能把原本很复杂的异步代码 , 通过协程化改造 , 转变成逻辑简洁的顺序调用 。
推荐阅读
- 阿修罗|阴阳师:超鬼王后日谈,数值怪全面开花,活动一年一次刚刚好
- 电子竞技|S11刚刚结束,中日韩亚洲对抗赛拉开序幕,参赛阵容豪华
- kpl秋季赛|KPL秋季赛XYG.羲和细节单杀伽罗,大仙:刚刚卡住是我的错,稳住!
- 传奇世界|传奇世界:家族公会情节
- 逆水寒|不愧是网易游戏“亲儿子”!刚刚首测,就豪掷百万拉着玩家去度假
- 星际争霸|虫族起源资料 我们熟知的智慧虫群 刚刚诞生不到70年
- 云缨|新英雄云缨刚刚登陆,三大克星已诞生,张良有控制,他们能反秒
- lpl|LPL再次迎来“重量级上单”!刚刚加冕总冠军,就立志成为LPL选手
- 原神|原神:优菈PV刚刚上线,爱打喷嚏的她就被国内外网友玩坏了
- 原神|原神:钟离一命不够用,二命刚刚好,满命没必要?