程序员那些事儿之初学IOS开发思路篇


 以下纯为个人体验后产生的观点,错误之处绝对大大存在。请谅解,并请大家有选择性的、带有辩证的眼光和批判的眼光阅读。


 上个月,悉闻某好友在弄IOS项目,由于其IOS学习时间不长,开发过程中屡屡碰壁,吾不忍心提出帮忙,事后分些提成给我。

 好友“呸”了我,说我从头学ios几乎是不可能帮到他的,并且很可能代码是无法直视的。

 我倔心冲天直上,打算在业余时间发疯图强,偏要强迫的帮助他。

 好友愕然,质疑我为何要“放弃治疗”。

。。。


 于是疯狂学习后1个半月后,稍有些心得,不敢独自享乐,遂拿出来和大家分享,虽然果断写出来的代码还无法直视,但还是要自我赏析一番。


  正文开始,请做好喷墨的准备:


 一、个人知识背景

   8年c#、PHP等混合型开发经验,个人做开发起初是为了谋生、后期是为了赚钱。无奈,技术半碗水、商务资源半桶水、团队运作能力半吊子,因此一直没有啥建树。

   对于c/c++,我直视我自己,如果和高手比:那就是一点都不会。

  对于objective c 。我想说,在我自学之前,不管和谁比,我都是一点都不会。

  那晚,我点燃了一根烟坐在我的macbook前思考了很久,终于决定开学。

  对了,做ios开发,买一台macbook是必须的。不要想着使用黑苹果来代替,当然某些配置的台机是可以装上macos的,不过需要折腾很久,万一未遂,你家又会多一台只用来dota的机器。


二、学习前十天

  1、区分

    如果世界上要投票最痛苦的事,那也就是毫无基础学习ios开发了。我捣鼓了好几天才发现,原来商业项目中需要针对iphone和ipad分别开发一套程序才行。否则iphone程序放到ipad则无法直视,ipad专有程序放到iphone那直接就是无法运行。

   2、语言语法

    objective c语法是ios开发必备的。我采取的方式是花半天时间 硬背住。不去理解,因为平时其他工作上的事情实在太多。晚上还要做家庭煮夫,伺候老婆孩子,不小心还要被客户拉出去觥筹交错,所以留给我真正的学习时间甚少。

   我开始怀念我大学时光,为何大学时光是最好的学习光景?那就是因为阻碍你的事情很少,你几乎不用考虑任何旁人的感受,责任和义务还没有凸显。但是有一点,大部分人大学时光对“钱”没有深入的理解,所以导致学习起来没有动力。

  学习的动力来自哪里?我个人认为:来自经济的压力和对金钱的渴望。

   捣鼓了1天后,我发现要快速学习obj-c ,那么需要背住这门语言中的 几个基本类型,如string、int、float (够了吗?其实一开始够了),记住常见的for循环,然后是记住一些基本数组的用法,譬如array和dictionary

   你搞 c#也是一样,数值类型、for循环、if else、数组和哈希, 这个是需要立马背住的语法。然后就可以了,其他不用学。在后面边开发边学嘛~~~。等咱都学会了,黄花菜都凉了。

   有句话叫做:产品应该使用边上线边完善的方式建设,而不应该过度测试和完善。这句话其实很对,在当今信息化发展飞速、产品淘汰飞速、竞争无比激烈的年代,做项目最关键的是要直接和商业利益挂钩。

   我举个最简单的例子:你突然接到了一个项目,预付款30%,系统上线再付60%。你理解这句话其实还有个含义,不管你做的多么的完善,该客户明年我们必须忽悠他把软件重新升级、翻新,于是我们还能再收一笔钱。

   不理解?不认可?好,那我问你,你打算什么时候买房?买车?孩子的婚房准备好了?

   3、设计器

   用过c#或者delphi设计过界面的亲一定会知道,我们在开发这些windows窗体时除了一些通用的组件会封装成自定义控件,有些布局还是会用拖拉的方式构建。

   为什么要用拖拉?道理很简单,windows下面的窗体不能像手机那样横过来倒过去,所以你看到的样子就是最终运行的样子。

   web开发能不能用拖拉?我的结论是不能,如果你不熟悉html+css,那么你做出来的界面必定无法直视。道理很简单,拖拉出来的界面在不同浏览器不能通用。

  手机开发能不能用拖拉?这里讲ios能不能拖拉?我的结论还是不能,正因为手机是可以和横七竖八放置的,所以你必须用代码来控制全面的布局。而且手机和web其实一样,外层需要用各种tableview来限制布局。不是随意拉一个控件就可以的。不然到时候运行起来根本不是那么回事。


   接下来我的学习基本上就摆脱设计器了,因为我除了头几天用设计器拖拉一个button 进行测试外,后面几乎就是直接用代码编写界面。(悄悄的说:主要是我找了n久都不知道该button怎么和程序关联起来,虽然后面看了文档知道了,但是我心已凉,决定弃之)


 4、看文档

    学技术免不了就是看文档,以下有个优先级

  1、看官方文档。这是必备技能,所以英文必须好。正所谓英文好的不一定是高手,但是高手英文都不会差。

    如果英文差又想做高手咋办? 恶补英文 是正道。

    如果我实在不想恶补又想看文档咋办?大家可以用chrome浏览器中的翻译功能,注意apple的官方文档英文构句很规范,基本上用翻译出来的东西能看懂大概。

  2、逛中文论坛。官方文档主要体现的是详细以及最新,但是真正做技术需要的是经验。很多中文论坛有很多大神写的文档包含了他各种各样的经验以及遇到困难时的解决思路。

    切记,我们不要在人家文章下面写一个“求源代码,我的邮箱是XXXXX”。这对我们一点好处都没有,学技术是靠 熟读官方文档+国人学习思路。人家的代码看了只会让你对该技术失去所有信心。

   最后,老外写代码写的很牛牛,但是不适合初学者学习。高手写代码写成那熊样不是因为他刻意写成那样,而是这是他的一种习惯。我们不要刻意去模仿,做真实的自己。


5、写代码

   以下是小段落,

  1、和c一样,都会需要一个主函数main,然后其他模块各运行各的。至于手工释放,亲,apple早就有自动释放机制了,当我们在网上找到手工release的文章时,说明已经过时了。

  2、强烈推荐必须提前熟悉一下,UIView、UITableView、uinavigationcontroller、UIButton、UILabel等类。然后还要熟悉一下NSString NSInteger CGFloat CGRECT CGSize CGColor CGFont 等对象。

    前者你要熟悉它们是怎么加载到你的视图中去的,尤其uinavigationcontroller,你要知道在ios开发中,切换界面都是通过这玩意儿,绝对不可能是view.show()这种方法(那是c#)。如果你熟悉web,上面这些货就是html(document),table,location(js控制脚本),input等等。

   后者你要熟悉的是string类型的叠加和比对。以及任何一个控件的呈现都需要CGRECT来控制。CGRect 其实就是x轴 y轴 width 和height。注意控件所在容器的左上方就是(x=0,y=0).对于CGColor,它的颜色数值推荐使用RGB三个数字来配色,不过这厮的三个数字需要分别除以255,注意是用float类型。

 3、对于UItableview 。你必须(这里讲的是必须)封装两个类继承与UITableView ,一个是用以普通视图,一个是用于group视图。为何?难道你愿意每次窗体都写上UItableview的各种重载方法名吗?同样,UITableView不要使用拖拉的方式加载到你的窗体,应该直接用addSubView的方式加载。

 4、apple的模拟器很智能,你直接选择 硬件-->向左旋转可以横屏,注意:部分控件的加载你需要根据横屏还是竖屏还修改它的CGRect,这就是为何我们不能用拖拉的方式加载控件。否则界面就会错乱。

5、对于UIButton,你要学会用addTarget来设置它的按钮事件。这好比js中的attachEvent 嘛。

6、你要学会用performBackground来让某些事情后台运行。你难道希望运行一个事情后界面就卡在那了吗?

7、如果你要使用MPMoviePlayerViewController , 那么记得把这个变量设置为全局变量,否则现在不能播放。这货全屏模式下有个默认的"done"按钮,所以一般我是自己写按钮来执行他的play还是stop。注意这货不能播放flv等apple深恶痛绝的视频,你真要放,那么请转换一个标准参数的mp4格式。不要指望用户和我们一样都会越狱。

8、对于复杂的UI我们会需要使用到html5,注意,html5很强大。不过,你上来并不需要会这些。以后再说

9、学会异步做一些远程请求,对于网上非异步代码请直接略过,商业代码中绝对不会同步去执行一个很卡很繁琐的远程请求。譬如你要做webservice调用的时候。

10.此处省略1万字,当你上述都了解了,那么你基本上已经有一定的开发基础了。


6、花絮。

  1、有人会问,为何这篇文章没有示例代码。我想说,看示例代码请去apple看文档,上述已经教你如何用翻译软件看了。注意:apple的每次sdk升级都会导致一些原有代码在新的sdk下无法运行。为何学的慢?其实就是不看官方的文档而是去海量搜索中文文档,因为很多它们都过时了,你拷贝下来发现不能运行你会很火,并且觉得ios太特么难了,时间久了你会放弃治疗

 

 2、xcode是免费的。网上有些文章说花钱可以发给你免费的版本都是扯淡。另,脑子进水才会不使用xcode而去找一些第三方替代品,当你成为高手了那么可以玩一些开源的IDE做一些替代开发。凡是玩开源的都是已经具备一定基础的人,你想开源的软件在成熟之前Bug巨多,你能边开发边fix还不是高手?


 3、学习ios开发要想熟练 只有一个办法就是练、好好练、认真练。不要写写代码还要去夜店玩玩,那学不好。


4、动力在哪里?有条件的话找个客户,免费帮他做一个应用。让他看效果后付钱。这是锻炼你的最好办法。技术要想学得好,必须与”万恶的金钱“挂钩。


5、apple app有前途还是android有前途?注意:没有牛逼或者有前途的语言,只有牛逼的你和”万恶的身躯“。大牛,哪怕拿着foxpro也能去忽悠钱。注意:只会技术其他什么都不会的不是大牛,我们要吸取别人的精华 但是要懂得去其糟粕。很多大牛的技术精髓值得我们一生去膜拜,但是他们的一些过于偏激的性格不值得学习。


6、英文太重要。为何我们是菜鸟?其中有个很重要的因素,那就是英文太差太恶心。


7、技术的目的是什么?其实就是一条:转化为利润。永恒不变的,当然你有抱负开发一个新操作系统为全人类免费服务,我在精神上支持你。反正我不会这么干,我房贷还有部分没还清呢


8、没了,以上我的话不一定正确,请带着批判的、辩证的眼光阅读。

你可能感兴趣的:(程序员那些事儿之初学IOS开发思路篇)