阅读 5260

Flutter开发和iOS开发的区别(优缺点)

   自己写flutter也有段时间了,这次来聊聊flutter开发App和原生iOS开发App各有什么优缺点.

不废话,直奔主题👇

1. 编译运行

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

   

2. 编程模式不同

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

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

3. 编码方式

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

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

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

5. SDK集成

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

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

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

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

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

  • Flutter目前为止,我觉得最差劲的一点,就是每个dart文件用到的头文件,都需要导入一遍!!!官方没有提供任何的便捷方法,三方也没有!!!太不方便了 下面截图体会.下面两个不同的文件都需要用到app_fit.dart文件,就需要在这两个dart文件中分别导入.
  • iOS关于头文件导入就好很多,有个全局的pch文件,配置好路径,全局使用,很方便.

8. 文件夹命名

  • Flutter中,我在学习使用的过程中,文件夹名称都是用英文命名的,用中文会出现一些未知错误.
  • iOS中的文件夹命名是完美支持中文命名的

9. Debug调试

  • Flutter开发工具是VSCode和Android Stadio,这两个debug断点调试的时候,我用起来不是那么友好方便.感觉一般,个人开发过程中,封装了一个hylog来打印所在行来调试问题.
  • iOS的开发工具是Xcode,断点调试很方便,一打断点,自动捕捉,不用调整模式.