第一个公司的iOS项目总结

第一个正式的universal项目差不多快要结束,总结一下,分享给大家。因为可能我的比较具有代表性,如何从压根不懂开始做起。(分享的另外一个目的也是希望大家提提建议,毕竟只有互相交流中才能更快成长)

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

  做项目前:

  零面向对象实际项目经验,更不用说透彻理解design pattern

  零iOS实际项目经验

  只懂一点点的C和汇编代码,其它如java、ruby、php、HTML5一点不沾边,可以说是不属于互联网的业余玩家

  项目的情况:

  做项目过程中,客户需求变化极其频繁和巨大,对代码结构的robust是一大挑战。虽然本人特别讨厌需求变动,但是在外,身不由己

  Universal项目,即是iPhone + iPad 的一个项目

  基本上这个项目涉及到了iOS的方方面面,麻雀虽小,但是五脏俱全

  关于程序结构设计

  尝试用面向对象的方式去设计结构,但设计的时候流于形式,根据现有的一些best practice依葫芦画瓢,但实际上只有实践了才知道,比如:

  1. 属性: 什么时候用和为什么用属性、如何保持属性私有、self.的使用,属性的内存释放;

  2. 成员变量和属性的区别

  3. 方法:什么时候用类方法和对象方法

  4. 好的设计真的是“增之一分则太长,减之一分则太短”;好的设计关系到以后重构的方便性

  5. 解耦设计:对象之间如何通讯,如何传值,如何回传,如何用好notification、delegate、KVO;如何保持对象的纯洁(不受玷污)

  6. MVC中的M和C分离,一直觉得自己做的项目是小项目,而且一直认为过于注重结构,会增加代码量,但是实际上项目不分大小,好的设计:

  能随时应对客户的需求变化

  能自己看得懂自己写的代码(改的多了,都看不懂自己的代码了,这是最悲催)

  回归测试,一旦客户需求改变,乱糟糟的代码更加乱,这样回归基本上是需要全部。好的设计可以把客户需求改变带来的回归测试降低到最低

  关于面向对象设计

  之前从没有面向对象设计的经验,所以第一次从这种角度去解决问题。“实践出真理”,无论你平时看多少书,如果没有实践过,真的是无法体会面向对象设计的:

  一切从面向对象出发设计:类、对象、(私有)方法、(私有)属性

  所谓面向对象,就是根据现实世界中客观存在的事物(即对象)出发来构造软件系统

  只有真正从面向对象去设计,几个月甚至几年后,你才能复盘你的代码。以前一直觉得代码复盘如同围棋复盘绝对是天才才有的本领,现在才明白,其实关键是:你要清楚的知道你的代码用在了哪里,为什么用

  从面向对象出发,不要觉得一个功能很简单一个方法就搞定,尽量用面向对象去考虑。这是做项目过程中犯的最大的错误

  关于ARC

  我是项目做了1个月后,才决定把项目从MRC转到ARC,现在回头看看,当初真实明智,因为在第一个月,内存管理上的问题和处理让我很头疼也很花时间。关于ARC

  没有想象中的会比MRC性能差,ARC不是JAVA的垃圾回收,性能其实与MRC基本一致

  ARC中没有明确的release操作,这时更需要注意内存管理,比如在一个Controller中使用Gyro sensor的时候,这种操作是绝对不能赋值给局部变量的:[[CMMotionManager alloc]init]

  虽然ARC似乎能为你做很多事,但是有些事情自己解决还是自己解决,比如当不需要用Gyro sensor时,_motionManager = nil(此时如果不设置,则startDeviceMotionUpdatesToQueue中的更新会一直进行);

  总之,对于ARC,难得糊涂中要“时刻保持觉醒”

  关于Perfomrance设计

  Coding真的是一点都来不得马虎,以前一直觉得iOS性能强大,无须担心性能,但是项目做下来,一大痛苦之处就是性能不够:

  应用程序、UIViewController和UIView的生命周期的认识如果不十分清楚,就很容易造成性能瓶颈

  大量的UIView插入移除操作会导致性能问题

  UITableView和UIScrollView导致滑动不顺畅的best practice

  关于知识点

  成为一名优秀Programmer需要丰富的经验和知识面,但是知识永远是学习不完的,所以要抓核心和基本,个人觉得以下几个知识点是iOS开发必须的。至于有些比如CoreText、CoreImage等,其实等到需要用时再去学习也来得及。

  内存管理,MRC和ARC

  多线程,iOS下有多种多线程实现方式,什么都应该了解一下,但是除了dispatch需要精通,其它只需要看懂 (dispatch效率最高,使用最方便)

  数据库,无论是Core Data,FMDB还是基本的Sqlite,万事不离其中,掌握Sqlite和SQL基本语法是必须的

  UIViewController、UITableViewController 和应用程序的生命周期

  看似简单但是很有深度的View之间的转场处理,因为涉及到大量生命周期,如presentModalViewController, presentViewController, pushViewController, addSubview, removeFromSuperview, self.view....

  网络处理相关的,如何请求JSON数据,如何HTTP GET和POST

  旋转处理,特别是iOS4、iOS5、iOS6的不同处理

  Debug的能力

  基本的设计模式:MVC、delegate、notification、target-action

  面向对象的核心思想,例如:不要以用户无法使用或不感兴趣的东西扰乱类的公有接口、类之间应该零耦合、把不相关的信息放在另一个类中

  不重复造轮子

  这个也不例外,iOS下的开源framework都太多了,基本上你需要的都能在Github或者Stackoverflow上找得到,所以平时:

  不要做井底之蛙,平时多了解开源的框架

  框架适合就行,就像争论AFNetwork和ASIHttpNetwork更棒没有意义的。写程序的有两类人,一类人追求技术极致,一类人技术只是实现产品的一种手段,我就是后面这个

  关于开源框架的学习

  这世界好的开源框架太多了,给我10年都看不完,所以需要选择,就像读书不在于都多,而在于读精,个人推荐如下。

  Three20 (其实我是不推荐的,因为它过时了,但是因为淘宝客户端用到)

  AFNetwork

  MBProgressHUD

  SDWebImage

  关于Continuous Improvement

  Six sigma中提到了持续改进,我们的能力提高也是这样。通过读好的开源框架是最好的进步方式。如何读开源框架,我们读开源框架的目的:

  其中的花式写法我们只是了解,不是我们的目的

  了解作者写框架的思路

  对比自己现有的,求改进

 关于设计模式

  做项目前,把GOF的23种设计模式都看了一遍,项目做下了,体会到:

  单看设计模式的书,纯粹是无用;

  设计模式的核心在于平时的有意无意的使用,因为它本身来源于实际;

  能熟背23种设计模式固然是件好事,但是不能也不见得是坏事(反正我是记不住的)

  欲速则不达

  代码之间往往只查一两个字符,但性能和结局多半千差万别,因为项目紧,压力大,又是第一个项目,所以写代码的时候,追求:"meet requirement,先满足功能,再考虑代码结构",但是实际:

  需求无论大小,代码结构设计是必须的而且是第一位的,因为这关系到未来的改动,未来自己能否看懂;

  欲速则不达,真是一个真理

  关于Best Practice的重要

  iOS已经很成熟了,基本上,所有问题都能找到答案,所有的需求都有现成的framework,或者只需要稍许改改。但是也正因为“万能的internet”,所以很多答案或者很多framework都是有问题的,所以适时总结很重要:

  把常用的代码或者容易错的代码写到Xcode的snippet中

  要有自己的library,不是自己摆酷,而是知识需要积累,有些开发中经常会遇到的

  用好的framework。不流行的框架要注意是否用了私有方法(苹果 will reject it)

  best practice,比如如何自定义TableCell,如何自定义Navigation bar

  不玩花的,不玩偏门的,写代码就是规规矩矩,一切按照苹果的best practice写

  面向对象的思想有很多概要,平时要时刻提醒自己

  关于HTML5

  iOS原生与HTML5 WEB APP天生就是一对敌人,做HTML5的可以不懂iOS开发,但是做iOS开发必须懂点HTML5:

  iOS应用中一些“高度变化”或“性能要求不高”或“上线紧迫”的地方会用到UIWebView

  iOS原生与UIWebView的之间交互其实也可以很棒,甚至JSP交互

  HTML5是“可能”的未来,世界都在谈论

  HTML5看似只有一个知识点,但是其实要求比iOS原生开都高:一个典型的移动HTML5页面 = JSP + HTML + CSS + JQuery + backbone.js。或者学习PhoneGap也是不错的注意。

  关于未来:

  如何让自己在最短的时间内成为优秀,这是每天都在思考的,因为对比别人_大学+工作下来的多年工作经验,我是不惧任何优势的,但是既然入行,就必须做优秀。所以选择值得做的事尤其重要:

  看书没用,实践和Coding是提高能力的唯一途径;

  做实际项目比自己玩玩靠谱十万倍

  压力下工作成长更快,所以不断挑战自己,人的潜力是无限的

  番茄工作法则比较适合我(每次集中做半个小时)

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-22 03:38:42

第一个公司的iOS项目总结的相关文章

开源 iOS 项目分类索引大全

mattt大神的发布程序:https://github.com/nomad/shenzhen ----------------Mac完整项目----------电台:https://github.com/myoula/sostart ----------------iOS完整项目----------------1,豆瓣相册 https://github.com/TonnyTao/DoubanAlbum2,voa在线英语 https://github.com/cubewang/NewsReader

《深入浅出iPhone/iPad开发(第2版)》——Xcode是你的iOS项目的枢纽

Xcode是你的iOS项目的枢纽 深入浅出iPhone/iPad开发(第2版) 当Xcode打开你新建的基于视图的项目时,你会看到所有构成这个项目的文件,但是我们改变了一点点.通过展开项目,并选择一个.xib文件(请在查看时多花点时间),GUI编辑器会在左边打开.要打开侧端的辅助视图,点击编辑器右上的铺助编辑器按钮. 我们将使用一些SDK中的其他工具(尤其是模拟器),但是它们都用于处理这里所包含的文件. 显示的文件和框架有悖于我们这个基于视图的应用程序的选择.让我们继续向前,我们将使用不同类型的

如何将iOS项目的编译速度提高5倍

前言 贝聊目前开发的两款App分别是贝聊家长版和贝聊老师版,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60万.现在打包一次耗时需要11~12分钟.虽然还远远比不上 Facebook 的40分钟,但是我们在内测的时候,经常一天要发布内测版两到三次.打包时CPU占用基本上是百分百的,因为没有专门的 CI 机器,对负责打包的同事(其实就是我自己)的工作时间占用比较多,所以最近一直在寻找加快打包速度的方案. 目

MVVM 模式下iOS项目目录结构详细说明

原文出自[听云技术博客]:http://blog.tingyun.com/web/article/detail/650 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式--MVVM. 所以 MVVM 到底是什么?下面,我们将结合代码,说明 MVVM 设计模式以及项目目录结构. 一.MVVM 模式介绍  MVVM 是 Model-View-View Model 的缩写,MVVM 听起来好像很复杂的样子,但它本质上就是M

ios 项目是用adhoc生产证书打包的,为什么安装到手机上就被说成是开发环境

问题描述 ios 项目是用adhoc生产证书打包的,为什么安装到手机上就被说成是开发环境 ios 项目是用adhoc生产证书打包的,为什么安装到手机上就被说成是开发环境 解决方案 最好用开发者证书来签名发布 解决方案二: OS 应用提供三种类型的证书签名,Ad-hoc.In-house.App-Store 打出的包分别为内测版.企业版.App-Store版. Ad-hoc 需要把设备UDID添加到证书的手机才可安装,一般用于公司内部测试,In-house 任何iOS设备均可安装,但是需要企业账号

佳能CEO:毫不犹豫舍弃无助公司发展的项目

每经特约记者 罗天 日本东京摄影报道上个世纪初,一位名叫吉田五郎的日本人因为受到美国商人一句"你们怎么连这样一点小小机器都不能制造"的嘲笑,下定决心要研制出属于日本的国产相机品牌.他的这一决定日后成就了一个全球闻名的相机品牌.1933年11月,吉田五郎与朋友一起在东京共同创立了"精机光学研究所",并于次年研制出了日本第一代高级的35mm布帘式快门相机,并于1935年开始以Canon为注册商标,这就是佳能的起源.吉田五郎的公司后来被御手洗毅收购,御手洗毅便成为佳能公司

为iOS项目添加Daily Build

很多人在说到Daily Build的时候总是喜欢背书.背书就背书吧,总比混迹软件行业连书都没看过的强.很久以前遇到一个奇葩.每次到代码提交测的通知就着急忙慌的催促组员赶紧干活,开始严重加班,晚饭都不吃...偶尔还需要开通宵.但是即使如此,最后也不会得到什么好的反馈.那个team就是这样循环往复的做着项目,直到永恒.如果项目的相关人员能背背敏捷什么的开发书籍,想必情况总能有所改善. 相信以上情况各位多少都遇到过,那么Daily Build为什么会对这样的情况有所改善呢? 快速定位错误.那天的Dai

iOS 项目中的version和build 详解_IOS

iOS 项目中的version和build Version在plist文件中的key是"CFBundleShortVersionString",标识应用程序的发布版本号,和AppStore上的版本号保持一致.该版本的版本号是三个分隔的整数组成的字符串.第一个整数代表重大修改的版本,如实现新的功能或重大变化的修订.第二个整数表示的修订,实现较突出的特点.第三个整数代表维护版本 Build在plist文件中的key是"CFBundleVersion",标示(发布或者未发

ios项目中客户端与服务器通信 认证加密怎么做?

问题描述 ios项目中客户端与服务器通信 认证加密怎么做? ios项目中客户端与服务器通信 认证加密怎么做? 主要是还不理解 解决方案 Apple 的 iAP认证,需要参考协议 + 加密 IC 来实现不懂就要看协议,是比较复杂,且只是 E 文版本的文档 解决方案二: iAP是内购吧,与问题不太相关吧..通信中感觉主要做好这几点吧1.HTTPS2.字符串参数.文件等敏感信息传输过程中保持加密状态,至于加密算法,建议使用非对称的RSA