CocoaChina:您是如何接触到iOS开发的?ZennyChen:我是2009年注册CocoaChina的,当时觉得这个论坛在OSX和iOS开发相关话题上很专业,所以很高兴加入这里和大家一起讨论OSX和iOS开发相关话题。.之前一直从事嵌入式设备的驱动开发和功能机的应用开发,对底层硬件比较熟悉。2011年11月,正式开始进军移动互联网行业。与iOS的联想也很奇怪。2008年就打算做游戏,甚至萌生了做游戏创业的念头。但是没有明确的目标,针对哪个平台开发游戏?索尼、任天堂等我都了解过,授权费挺吓人的,小微企业根本负担不起,而且审核比较严格,入门门槛挺高的。后来无意中发现了AppStore。对它做了一番研究后,我在2009年5月买了人生中的第一台Mac——MacMini,当时售价4988元,从此开始走上了iOS开发的道路。CocoaChina:您曾经讲过Swift,您怎么看这门语言?需要现在开始学习吗?ZennyChen:Swift语言感觉有点仓促。自Beta1发布以来,许多事情都发生了变化。比如数组类型一开始是type[],现在是[type]。当然,这并不能掩盖其先进性。Swift是我迄今为止看到的为数不多的支持元组和闭包等许多动态特性的编译型编程语言之一。Swift中的闭包不同于C++中的Lambda、LLVMClangC扩展中的Blocks和Java中的Lambda表达式。它的表情比较流线,而且很机能,非常有表??现力!所以当你使用Swift的时候,你会感觉你在使用一个类似Python的脚本,而且你在使用像Scheme这样的函数式编程语言,它也包含了面向对象的特性(当然,在Python和JavaScript等脚本中也是如此).语言)。Swift是一门非常复杂的编程语言,其复杂度仅次于C++,远高于C和Objective-C。但是,因为它可以采用多种编程范式,所以对程序员的入门门槛其实比较低。10月中旬我要举办的Swift编程语言公开课,也会邀请一些编程经验不多的产品经理,Planning,甚至美工等等,再结合Xcode自带的Playground,学习起来也是有声有色和有趣的。而你要想精通它,知道它的所有坑,需要花费大量的时间和精力,还得正式用它来做几个项目。我觉得用Swift开发会成为大势所趋。正如我之前所描述的,许多公司仍然专注于iOS平台,因此艺术家经常基于iPhone/iPad屏幕进行设计。如果他们能直接把图片剪下来,放到storyboard里,然后用swift编程,看看实际运行效果,那么想想,应用开发者的压力会大大减轻。而且以前美工剪完图后,要自己量好坐标,然后再告诉开发商,沟通上有一些额外的成本。会增加太多的工作压力,反而会觉得更有趣更有成就感。所以我觉得iOS开发未来的场景会是iOS专业开发者可以结合Swift和Objective-C做美术和产品人员最简单的界面,然后在应用中直接调用这些封装好的库函数就可以立马看到界面效果,所以整体的工作效率会提高,尤其是结合playground,所见即所得~CocoaChina:iOS8开放了很多新特性,引入了很多API。您最关心它的哪些功能??这些属性有什么特别之处?ZennyChen:AppExtensions和Handoff对我来说更有趣。关于AppExtension,AppStore中已经有流行的搜狗输入法和百度输入法。这应该说是iOS非常革命性的一个特性,也打破了苹果以往非常保守的态度。而Handoff也是一个非常有趣的特性。它允许您在一台设备上使用应用程序并在另一台设备上无缝呈现当前活动。这感觉非常有趣。比较实用的新特性包括PhotoKit、HealthKit、HomeKit、CloudKit。HealthKit结合AppleWatch可以想出很多有趣的花样。而HomeKit将在智能家居领域助一臂之力;CloudKit是在线同步数据的好东西。CloudKit是一个非常好的工具,特别是对于一些小微企业来说。一些单机应用可以直接使用CloudKit进行数据存储和传输,不需要自己搭建服务器。当然,对于我这种低级狂热者来说,最让我兴奋的还是Metal,哈哈。CocoaChina:你以前开发过游戏应用吗,了解过SceneKit和SpriteKit吗?如果是这样,你能分析一下苹果为什么要引入它们吗?ZennyChen:业余时间做过一些小游戏和一些简单的游戏引擎。我以前用过SpriteKit,目前来看,它的功能还是比Cocos2D-X弱了很多。当然它的优点是可以直接用Objective-C和Swift开发。此外,它还有自己的粒子编辑器,使用方便。比较方便,但是性能上好像还有很大的提升空间。SpriteKit从iOS7.0开始可用。而SceneKit是8.0中新增的。SceneKit主要提供了一个描述3D场景的上层接口,提供了一些3D模型导入,材质,光照,物理碰撞,粒子效果等,不过我还没有尝试过,所以不知道它的情况运行时性能。我觉得苹果之所以力推它们,是为了吸引开发者为AppStore注入新鲜血液。你想,Android提供的工具非常有限,所以很多应用或者游戏的开发难度都比较大,这也造成了很多公司仍然以iOS作为主要的开发目标平台,而Android作为后备胎。CocoaChina:新的iOS图形处理框架Metal和OpenGLES有什么区别?能构成威胁吗?ZennyChen:Metal提供了一个比OpenGL更低级别的图形接口,它现在的目标是使用AppleA7或更新处理器的GPU。因为从PowerVR6系列开始,GPU真正具备了通用计算能力,这使得Metal在这个版本中引入了ComputeShader,这是相当不错的。在OpenGLES上,直到3.1版本才引入ComputeShader。正是因为为苹果A系列处理器的GPU量身定做,Metal会比通用的OpenGLES执行速度更快,库容量也更小,即库的代码更轻量.我们在这次Metal的特性介绍中也看到,Metal对Draw操作功能的优化效果是非常显着的。Metal的API更类似于OpenCL。虽然是用Objective-C封装的,但是用纯C语言封装会很方便(满足LLVMClang扩展的GNU11,包括对Blocks语法的支持)。而且整套API用完之后感觉逻辑很清爽,一点冗余都没有,就是整个渲染管线的操作步骤,呵呵。而且只要稍微了解一下OpenGL,就可以很快上手。至于对OpenGLES的威胁,苹果毕竟不是微软,所以还是会对开放标准给予大力支持。我认为未来在iOS上,Metal将与OpenGLES共存。而且Apple也不太可能在iOS上引入OpenCL。如果你想在iOS上使用GPU做高强度的通用计算,你可以直接使用Metal的ComputeShader。因此,个人认为Metal的引入其实是为GPU通用计算领域开辟了一条新的道路。用过DirectX(9~11)、OpenGL(2.1~4.1)、OpenGLES(1.1~3.0)和Metal,目前觉得Metal最好用。不过在API封装方面,Objective-C确实做到了简洁和强大的结合,这可能也是我觉得它好用的原因之一吧~当然如果你不习惯用Shader来写顶点计算和像素计算的话,OpenGLES1.1还是可以用的。Metal没有提供类似于OpenGLES1.1中固定管线的功能。所以在这一点上,我也不认为苹果会扼杀OpenGLES。CocoaChina:开发过程中使用了哪些开源项目?您在使用过程中遇到过哪些问题?ZennyChen:我现在在开发过程中使用的开源项目比较少。比较大的是FFmpeg,是用来处理音视频的,Mac上用的。在iOS项目中,我使用过minizip进行文件压缩和解压,以及Cocos2D-X游戏引擎。其实使用第三方开源软件的主要问题是,众所周知,iOS更新速度比较快,很多开源项目维护2、3年后可能就维护不起来了,然后各种BUG升级iOS时会发生崩溃。所以只有自己掌握的代码才是最安全的。我对下属的要求很简单。尽量避免使用第三方的东西。如果你使用它们,你还必须了解每一行代码在做什么,以便于后期维护。当然,我们可以放心使用像Cocos2D-X这样大公司不断维护的项目。CocoaChina:学习CPU、GPU等底层技术对iOS应用调优有什么帮助?在提升性能方面,iOS应用有哪些优化技巧?ZennyChen:其实对于普通的应用来说,CPU和GPU底层技术的性能调优帮助不大。前面讲Metal时提到,CPU和GPU底层技术的性能调优主要是针对高强度计算,比如大规模矩阵乘法(比如1024x1024),图像处理(滤波器,边缘检测,平滑)等),机器视觉,视频编解码器(如MPEG-4,H264,H265,VP8等),此外还有一些科学计算,如现在比较流行的DNN,生物科学中的DNA分析,和分子动力学。对于一些游戏之类的,大部分依赖于游戏引擎,所以优化空间不大。对于大多数应用的优化,目前主要的方法是通过多核多线程并行来提高计算性能。另外,像网络通信之类的东西可以放在用户线程中,避免被用来处理UI的主线程过多干扰。CocoaChina:iOS开发者应该如何规划自己的职业发展路线?除了iOS,还需要学习其他技术吗?ZennyChen:这是个好问题。我已经工作了将近10年。而且iOS专业开发刚做3年,呵呵。其实我觉得大家要想往技术方向发展,首先要打好基础。打好基础后,可以应付各种新的编程语言,各种处理器,各种操作系统平台。所以我建议大家利用业余时间巩固在传统大学所学的科目,比如操作系统、数据结构、数理逻辑、计算机体系结构、汇编语言、C语言、网络通信、数据库等。此外,您还可以熟悉HTML5相关技术。毕竟iOS大部分涉及移动互联网领域,如果有一些HTML5知识就更好了。如果觉得C语言不够好,可以巩固一下。C语言是计算机程序设计领域的数学,是所有类C程序设计语言的鼻祖语言,从TIOBE排行榜上也可以看出它一直位居榜首。此外,Objective-C***与C语言无缝兼容。从这点来看,C语言还是很重要的。C、Objective-C和Swift的关系是:Swift是对Objective-C的封装,虽然封装变化很大,你真的看不出它还是一门类C的语言;而Objective-C是对C语言封装的一种封装,在C语言的基础上增加了面向对象和反射动态特性。所以,学习C对于iOS开发是很有帮助的。以上主要讲了iOS专业技术开发者如何进一步提升技术能力。其实归根结底就是把基础打好,然后可以尝试专攻更专业的领域,比如通信、3D图形、图像识别等。因为大部分做iOS的人基本都是在鼓捣与应用层。老实说,应用层工作一两年就可以基本掌握,继续这样下去,技术上提升不了多少。一些iOS开发者想提高自己在公司的地位,我想很大程度上取决于他们对公司核心业务的了解。对于中小企业来说,产品设计师和策划人员不可能对产品进行详细的描述,有很多地方需要开发人员对设计意图进行拓展思考。如果把握好公司的企业文化、工作流程、核心业务逻辑,就能做出超出预期的产品,处理好人际关系,提升地位也不是很难。.当然,我也遇到过很多年轻的开发者,对未来感到迷茫,不知道未来该怎样走。所以,我觉得对于那些开发者来说,应该先静下心来,打好基础,再思考自己未来的技术趋势。毕竟,iOS开发将??在未来很长一段时间内成为热门的技术工作。如果你想发展到更高的位置,除了技术,我认为你必须对产品有控制力,甚至对新的市场趋势有一种感觉。既然已经身处这个行业,就要学会如何不断学习,快速应对市场新热点。当前,应用程序开发处于快速发展和变化的移动互联网的中心。开发者有机会制作出潮流甚至改变世界的作品。这些经历本身就是宝贵的财富。只要打好基础,做好充分的准备,抓住机遇,前途一定是光明的。
