Flutter开发和iOS开发(Native开发)的区别

10,646 阅读6分钟

不废话,直奔主题👇

1. 跨平台支持

  • Flutter支持iOS和Android平台和web平台(现有的移动Flutter应用程序无法在不进行更改的情况下在Web上运行)
  • iOS只能应用于iOS平台

2. 编程语言

  • Flutter编程语言是Dart.
  • iOS编程语言是OC,Swift.

3. 编译运行

  • Flutter支持的Hot reload(1s内)和Hot restart(3s-5s内)简直不要太赞,写UI界面的时候,一键看效果.
  • iOS每次写完都要重新Run一遍,遇到大项目...这效率差的不是一点半点

   

4. 编程模式不同

  • Flutter是声明式编程,也是现在的主流模式,构建UI的时候是从整体到部分,拿盖房子来比喻就是:先把房子的架构搭建起来,再往里面填东西.
  • iOS是命令式编程,构建UI的时候是从部分到整体,拿盖房子来比喻就是:一块砖一块砖的码,码完了,房子也就盖好了.
  • 拿下图举例👇

  • flutter开发,拿到UI首先会想到用Column组件纵向包含,两个输入框是多子布局Row包含2个子widget,其他都是单子widget,直接排列下来,再调整调整间距即可.
  • iOS开发拿到UI会想屏幕上有多少个控件,通过绝对定位和相对定位一个控件一个控件的放.
  • 两者的编写速度跟熟练度有关,在熟练度相同的情况下,flutter完成一个界面的时间是要比iOS短,效率更高一些.

5. 编码方式

  • Flutter编码类似于web,是嵌套式的,一层套一层.我写的过程中发现,即使再怎么封装widget,在遇到一些稍微复杂的页面时,还是会出现嵌套多层的尴尬,看起来很难受(图一)
  • iOS编码类名或者命名都很长,可读性很高,但是OC语法不亲民,太多语法具备的功能它没有,swift语言出来后好很多,写起来还算舒服(图二)

6. 插件支持(第三方支持)

  • Flutter支持的插件数量不够多,毕竟出来的时间太短(2018年12月才发布1.0版本),有一些比较成熟的轮子可用,比如dio.集成插件的方式很简单,在pub.dev网上找到后,写进pubspec.yaml文件后,pub get一下就OK了,很方便.
  • iOS支持的第三方很多,像几乎每个App必备的AFN,MJ都是开源作者写的.很多轮子都有现成的可以用.导入相比之下就麻烦很多,要下载cocoapods,一系列的安装,不够简洁.

7. SDK集成

  • flutter集成一些官方的SDK是比较麻烦的,比如微信登录,它是不能直接集成的.需要通过三方库桥接两端来集成微信SDK,文档也不够全
  • iOS集成一些官方SDK就很简单了,看着文档一步步来,初级开发都能搞定的事情.
  • 这个没太多可比性,因为毕竟flutter要顾及两端,难度和复杂度一定要高于iOS的.

8. 对于定制化需求的实现难度

  • 开发中我们经常会遇到一些定制化的需求,这些需求是不能直接使用现有的三方或者现有的控件(组件)来实现的.这种时候就只能自己写轮子.
  • 如果把一个App所有的功能点集合比作一辆汽车.iOS的一些基础控件UIButton,UILabel等就像是汽车的一个完整的车轮或者一个车门.封装程度更高,功能更多,但是不容易改.flutter的widget就像是一个完整车轮的一个轮圈,一个轮胎.更小,更容易被修改.就好比iOS里的UILabel组件可以设置宽高,多行,单行展示,圆角属性;而flutter里的Text宽高设置不了,圆角属性还需要借助Container或者其他的Widget来辅助实现.
  • flutter面对定制化需求,更容易魔改系统自带widget的一些属性.因为每个widget功能都不多.修改起来难度不大.
  • iOS,OC代码是闭源的,没法直接修改系统控件的属性,即使能用黑魔法runtime修改,也有点捉襟见肘,面对一些定制化需求时,开发起来会显得有些吃力.

9. 文件的导入(图片和头文件)

  • Flutter中导入本地图片需要填写图片路径,在使用的时候也要把路径写上,比较麻烦(下图一)但是flutter自带Icon库包含了很多实用的小图标,省了2/3的切图,很赞.
  • iOS中导入本地图片,直接拖进Asset文件夹,使用的时候直接写图片名称就行,很方便(下图二)但是没有Icon库,几乎所有切图都要导入.

  • iOS关于头文件导入,有个全局的pch文件,配置好路径,全局使用,很方便.
  • Flutte头文件导入,需要新建一个文件,使用export把其他头文件都放进来,然后其他地方import这个新文件 (现在很多APP为了启动速度和代码独立性, 都强调去除pch了,所以Flutter不支持类似于pch的文件导入方式也没什么问题)

10. 对于硬件功能的支持

  • Flutter 与硬件交互上比较弱,并且内存和cpu 的占用都会比较高.
  • iOS native对于硬件功能的支持是比较稳定的.

11. 实测性能

  • Flutter开发一些业务相比native来说,性能降低了至少20%,有框架自身的机制原因,也有社区生态不够完善的原因,比如:针对于iOS的tableView长列表,数据比较多,样式比较复杂的时候,Flutter使用listView实现滑动的时候,会出现掉帧的情况,需要使用分屏渲染等优化操作才能稳定滑动帧率(而这个优化技术在没有成熟轮子的情况下,门槛很高,闲鱼目前是主推Flutter的,但是体验很一般)
  • iOS  native的性能主要依赖于各种系统级别的API和框架,性能更好,稳定性更高,优化难度也小于Flutter

 总结:

  • Flutter能够提升开发效率,统一iOS端和Android端的代码.方便UI统一设计规范,方便测试完成测试工作,但是对于Web端的适配,仍然需要研究,也许会踩坑.
  • 市场上Flutter主要应用是与native混编,可以尝试做一些较轻的业务或者比较独立的业务.但是使用时要注意性能的问题.