会 Android 又会 iOS 的朋友请进 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KunMinX
V2EX    Android

会 Android 又会 iOS 的朋友请进

  •  
  •   KunMinX 2019-05-21 21:26:46 +08:00 13331 次点击
    这是一个创建于 2413 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在复盘 Android 知识,借此机会我想了解一下,同是移动端解决方案,Android 和 iOS 在应对各种场景的策略区别在于哪些地方?

    如果能推荐一本深入浅出讲这些缘起、经过、对策的系统架构方面的书,那我的愿望也就达到了。

    因为我是做 Android 的,我来简单说说我对 Android 的理解。

    - - - - - - - - - - - - - - - - -

    就比如,最开始你只有一部机硬件,你想在屏幕上渲染,于是封装了底层的一层 Surface Flinger。

    你还想窗口,于是你继续在上层封装了 WindowManager 和 Window,每个 Window 映射一块 Surface,并且通过进程通信的方式,去与底层的 WindowsManagerService 通信,来间接调用 SF 在 Surface 上做渲染。

    然而 Window 要是亲自去绘制,那就太复杂,于是再另外封装一个 View,View 延伸出 ViewGroup,相互之间通过组合模式构成一个树。每个 Window 都持有一个 ViewTree,那么绘制的工作就直接交给 View 来遍历和完成,我 Window 只需做个管理者,拿到绘制结果,向上级 WM 反映,通过 WM 与 WMS 取得联系,并最终通过 SF 渲染出。

    然而,你不仅有窗口,你还想要多窗口,于是通过模板方法模式,去暴露出 Activity 模板,让用户自定义实际上是一个个窗口的 Activity,而多窗口之间的切换、通信等关系,则由系统机制来把握。

    所以为了渲染、为了窗口、为了绘制、为了多窗口,Android 设计了这么些套路,那么 iOS 又是怎样的呢?它是否存在窗口的概念呢?它是依靠什么来绘制的呢?它是怎么管理多窗口的呢?
    9 条回复    2019-05-23 15:08:57 +08:00
    CoCoMcRee
        1
    CoCoMcRee  
       2019-05-21 22:48:08 +08:00
    一般情况下 iOS 是一个窗口 UIWindow, 多个视图控制器 UIViewController, 视图控制器里有各种各样的控件,基本都继承自 UIView.

    iOS 上画界面, 开发者其实也是在定义一个一个的 UIView 对象, 一般不需要去介入到绘制的过程中,除了一些特殊功能的开发.

    和安卓上的控件很多也是对应的,
    安卓有 ListView,GridView, iOS 有 UITableView
    安卓有 RecyclerView,GridView, iOS 有 UICollectionView
    KunMinX
        3
    KunMinX  
    OP
       2019-05-21 23:15:51 +08:00
    @CoCoMcRee @cht1995 感谢回复。

    刚刚看了 @cht1995 提供的官方文档,上面写着每个 UIWindow 恰好对应着一个 root ViewController,那我想这个 ViewController 对应的就是 Android 下的 Activity。或许也是 UIWindow 的一种模板方法模式的实现。
    mmdsun
        4
    mmdsun  
       2019-05-22 08:23:37 +08:00 via Android
    KunMinX
        5
    KunMinX  
    OP
       2019-05-22 11:20:56 +08:00 via iPhone
    @mmdsun 厉害了!
    wxl1380610
        6
    wxl1380610  
       2019-05-22 13:12:22 +08:00
    基本上 差不多
    cjh1095358798
        7
    cjh1095358798  
       2019-05-22 17:12:50 +08:00
    老哥 android 理解的挺透彻的
    lyxung
        8
    lyxung  
       2019-05-22 18:22:35 +08:00 via iPhone
    游戏引擎是怎么搞的,不适用这一套架构吧。用的 opengl 的一套 api ?
    lyxung
        9
    lyxung  
       2019-05-23 15:08:57 +08:00 via iPhone
    惨案
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4048 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:14 PVG 18:14 LAX 02:14 JFK 05:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86