十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
plist文件就相当于程序里面的dictionay里面可以层层嵌套dictionary或者array。解析就是读取内容放进dictionary就可以了。
创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目成都网站设计、网站建设、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元下花园做网站,已为上家服务,为下花园各地企业和个人服务,联系电话:028-86922220
一句话来形容:牛掰的不像地球上的人物。
我们不谈技术,就简单介绍一下这写出IOS和安卓的两位大神。
很多朋友都以为IOS是乔布斯的作品,实际不然,IOS系统实际上更多的是出自斯科特·福斯特之手。但这个人实在太低调了,以至于很多人都没有听过他的名字。
乔布斯开创了苹果公司的巅峰,拉开了智能手机的新时代,而福斯特正是那个时代最亮眼的星。这位大神是斯坦福大学计算机系的高材生,才华横溢的他多负责幕后工作,曾被认为是乔布斯最理想的接班人。
福斯特尔是苹果的王牌软件设计师,他是Mac OS X系统以及Aqua用户界面的最初设计者之一,iOS广为人知的多点触控界面就出自福斯特尔的手笔,备受好评的IOS生态也借鉴了不少他的研究成果。
遗憾的是,福斯特在后期有些膨胀了,再加上漏洞百出的苹果地图,让他得罪了不少领导。乔布斯病逝后,福斯特与上层不和,最终选择辞职,一代大神从此销声匿迹。
这个名字听上去好像还是听陌生的,但说起另一个名词大家肯定不会陌生:安卓。
而安德·鲁宾正是写出安卓系统的人。
安德·鲁宾有多厉害呢,焊接,编程,运维,PLC……几乎就没有他不会的东西。他23岁的时候就是卡尔蔡司机器人公司的设计师,这份履历足以让他吃香喝辣的了。但安德·鲁宾并不满足,1986年他进入了苹果公司,那时候苹果还是以技术人员为主。鲁宾刚去苹果公司就搞了个大新闻——他对公司的内部电话系统进行了重新编程,结果很多同事在那天都接到了老板的电话,声称要给他们股票奖励。
安德·鲁宾在苹果公司主要搞研发,苹果首款塔式电脑Quadra和 历史 上第一个软modem就出自他手。这人是个工作狂,一天24小时吃住全在办公室,他曾设计出一款智能手机操作系统和UI——Magic Cap,却因为理念太过超前没有被大众认可,1997年,心高气傲的他离开了苹果,又去了微软。
在微软他也闲不住,很快又闯了大祸,他做一款机器人被黑客入侵,微软安全小组表示这会泄露公司机密。在微软没呆够三年的他又跑路了,跑去斯坦福大学当教授了。
也是在这段时间,安德·鲁宾设计出了安卓的雏形,也遇到了贵人——谷歌创始人拉里·佩奇和谢尔盖·布林。不久后谷歌收购了安卓,安德•鲁宾也成为了谷歌的副总裁。
最后说个题外话,相比美国,我们确实缺少这样的才华横溢的技术性人才,也许是大环境的原因,我们至今也做不出像安卓和IOS这样优秀的操作系统。希望鸿蒙能在做好系统生态后,给大家带来惊喜吧。
本人10年开发培训经验,期间经历了Java Web,Android,H5,大数据,PHP等多个不同的方向的开发,也做过软件培训公司的金牌讲师,很有兴趣回答你这个问题。
以我自身的体会来说吧,程序员也是要分三六九等的。这个世界上绝大多数程序员都是做应用层面开发的,什么意思呢?就是说都是开发具体的App,网站,应用等的程序员。
但是这些程序员数量这么多,为啥子呢?因为大多数程序员达不到开发操作系统的能力呗,当然包括我自己。
所以这个世界上,也就只有一小部分程序员可以参与到操作系统的研发之中,他们可以说是程序员这个金字塔的塔尖部分。
而iOS或Android,都属于操作系统,那么开发这种系统的人,当然是很牛了。就好比Linux系统内核的开发者Linus,他很狂妄的说过:I'm your God! 没办法,人家有狂妄的资本。
如果有Java,Android,H5等开发方面的问题,或者是开发求职方面的问题,都可以在评论区留言,或者私信我!
研发一个系统不难,难的是如何让系统活下来并且占有较高的市场份额,除了大家熟悉的安卓和iOS之外,三星的Bada和Tizen、微软的Windows Phone、黑莓的BlackBerry OS、诺基亚的塞班等等,加在一起也有十余个了,但是最终还是被安卓和iOS分摊了市场。
这些系统并不是因为本身的技术问题死在了沙滩上,更多的原因是因为没有形成一个生态链!
在iOS刚开发出来时,乔布斯甚至打算让iOS全封闭,拒绝苹果公司以外的人开发应用程序,iPhone刚推出时,乔布斯表示将拒绝外部开发人员开发iOS应用程序,他认为这些外部开发人员开发iOS应用程序会破坏iPhone的体验完整性,把iPhone搞得乱七八糟, 让iPhone感染病毒 带来安全隐患。
好在后来被说服让开发者进来,不然现在我们很可能都见不到iOS系统了,因为生态圈的建设是最重要的,光有一个系统没有应用的支持也是白瞎,而安卓由于做的是开源系统,因此有巨量的开发者进入安卓开发应用,iOS和安卓的生态圈已经形成并且趋于稳定,其它企业要想再研发一个系统就比较困难了。
开发手机系统是个很庞大的工程,不但要有雄厚的资金还要有一支技术过硬的开发团队,别所自主研发系统,有时候开发一款软件都要需要一支团队昼夜不休的工作几个月甚至更长时间。
android操作系统本身是使用Java开发,使用JNI调用本地的C语言库,由操作系统实现对底层调用。iOS系统是苹果自己开发的,核心合适C语言。
一个新操作系统要运转起来,不只意味着上亿行代码,还需要生态系统运转起来,获得用户和开发者的支持。所以不是新开发操作系统是否容易,而是要养成新生态要花多久的时间。
当然是非常厉害了,看看我们身边的程序员在干什么事就知道了(很多根本就不够资格入行),能够进行系统开发的那部分人都是顶级高手,能写出安卓IOS那就更是高手中的高手了。
苹果IOS系统是由一位叫斯科特·福斯特尔带队孵化出的产品,至于这个系统的优点就不多说,毫无疑问目前没有任何移动端系统能与之媲美。苹果能一直领先业界,这款系统是有很大功劳的。那么斯科特是一位厉害的人吗,答案是肯定的,若光凭运气没有智慧是绝不可能把如此优秀的系统做出来的。
与一般的学霸差别并不大,福斯特的经历算不上传奇,在斯坦福大学获得符号系统学位和计算机科学学位后,97年一起和乔布斯加入了苹果。可能是习惯于幕后吧,大概是十年后大家才知道这位厉害的人物。2008年,提升为高级副总裁;12年,转任CEO库克的个人顾问,后因个人原因离职。
在进入苹果之前,他已经有一家自己软件公司,IOS就是在原有的基础上开发出来。IOS虽然是团队的产物,但若没有原始的积累是不可能发展如此顺利。
安卓最初的创始人是安迪·鲁宾,与福斯特的经历比较相似,最初的独立闯荡并没有出众的作品让他出名,都是在找到志同道合的合作伙伴才逐渐将自己的才华展现出来。不过鲁宾的从业经验的确非常丰富,可能也正是这些经历,让他在后来的职业生涯中能充满灵感。
1986年,取得尤蒂卡学院计算机学学士学位后,成为了卡尔·蔡司公司担任机器人工程师,当时的他只有23岁。1989年,他又顺利进入苹果,并且在苹果还狠狠干了一票。不久后又溜到了微软,只不过因为搞个人项目太猖狂,微软领导看不惯他,没有让他的作品发行。
可能安迪也想不到,他还能觅到知音,在斯坦福大学的一次授课中,安迪遇到了他人生中最懂他的两位贵人,他们就是谷歌创始人拉里·佩奇和谢尔盖·布林。几人不谋而合,终于做出了世界上最流行的手机操作系统——安卓。
如很多朋友所言,可能做一款系统难度的确不是最高的,很多国家都能办到,但是要做到像IOS或者安卓这么受欢迎也不是易事。所以连百度、阿里这样的巨头都曾放弃过,原因不言而喻。从现在华为鸿蒙的动作同样能看出,虽然谷歌苦苦相逼,但鸿蒙上线并不干脆。
不管是什么原因,这两个人能够做出如此优秀的系统,肯定不是一般软件开发人员能相比的。不过要论个人魅力,安迪可能要更加全面,动手能力、动脑能力、口才都非常厉害,安卓能在如此短的时间超越IOS规模离不开他的谋略。
当然,人都是有审美疲劳的,虽然现在的系统已经非常好用,但若有新系统出现,比如现在的鸿蒙,个人还是非常愿意一试的。
乱世出英雄,时代不同环境不同,如果谷歌总想着通过不良竞争打压别人,那么后来者的机会可能也就来了。
有的人总是说生态的问题,那是看新闻看多了,外行人看热闹看多了,难道真的以为这世界上只有热闹就够了,没有真正的技术了?
做一个操作系统是非常难的,全世界那么多软硬件巨头,而操作系统的数量一个手就能数的过来。常说的生态难,那只是第二步,而第一步是要把操作系统做出来,这绝不是简单的事。
一个操作系统,是创造一片生态,让全世界都能在你创造的环境内生存,并且还要用你定的规则来开发各种各样的软件。这里面需要做的事太多太多,需要一个很强大的团队,用数年的时间才能开发出来。然后就是核心问题了,你做的系统好不好用,功能合不合理?强不强大?万一系统设计的不行,不好用,没人用,那你这前期巨大的资金和数年的时间可就全白费了!这就算是世界级巨头也难以承受的损失。
正因为如此难,所以全世界也没有几个做操作系统的,现在华为做的系统,也是在安卓系统的基础上做的,也就是说,别人做好的系统,拿来改一改,都已经花了几千亿了。而最近宣传的电脑端的深度Deepin系统,也是在LINUX基础上做的,也就是说:还是别人的系统,咱们只是拿过来改了改而已!
一、当然挺牛的
iOS的负责人是福斯特,1997年陷入困境的苹果收购了乔布斯创立的NeXT公司,乔布斯带领福斯特等人加入苹果公司,随后福斯特负责了MAC OS的开发,将NeXTSTEP一些架构和设计理念引入MAC OS中。
后来乔布斯计划开发智能手机,委派福斯特负责iOS系统的开发,并且从那时候起他就是iOS系统负责人,直到离职,可以说福斯特是这两大操作系统的奠基者和长期负责人。
而Android操作系统最初由Andy Rubin开发的,他最开始想做的是互联网手机,所以创办Android,开始启动下一代智能手机的开发。最后安卓被谷歌收购,开启了安卓的辉煌历程。
二、但更牛的是生态,比系统本身难多了
当然,再加到系统本身,其实研发一个系统,本身并不是那么的难,国内很多厂商都有研发系统的能力,比如阿里有系统,华为有系统,要研发系统,再发展出一个成熟的生态,才是真的困难。
微软多厉害,三星也多厉害,但微软的手机系统,三星的手机系统都可以说是失败了,这个才是真正的难点。
目前华为推出HMS,其实也是为了生态,而鸿蒙发布了没有使用在手机上,也是因为生态不行,华为不敢也不能冒这个险,继续便宜安卓。
当年,红极一时的诺基亚我想大家不陌生吧。当年素有"机王"的称号,据相关信息显示,自1996年起,诺基亚连续14年占据手机市场份额第一。当时搭载的是塞班系统。2011年的时候,诺基亚手机被安卓跟苹果系统反超。错失世界第一的霸主地位。尽管诺基亚的暗淡有自己的决策问题,但是苹果跟安卓系统对他也是致命的打击。我有时候在想,当初的诺基亚是不是对这两哥们恨之入骨呢?这点不难看出这两哥们是蛮牛。
目前国内市场品牌手机商,比如华为,小米,oppo对android进行了修改,完善。有了自己的EMUI MIUI ColorOS系统。国人的手机要么是安卓机,要么是苹果机。其他系统的份额很小。尽管我们有华为的操作系统,但是不够完美。如果没有这两牛人系统,会不会影响到我们手机的使用呢?这点不难看出这两哥们是蛮牛。
近几年,移动互联网一直很火爆,也正因为这两系统。才使得这么多安卓与iOS开发人员那么多。试想,如国没有这个系统了,那会有多少开发人员会出现短暂的失业呢?从这点不难看出这两哥们是蛮牛。
跟乔帮主相比,可能很多人都不认识他,但是不管怎么样。他所做的贡献是铁板钉钉的事了。iOS出自他手。这哥们是苹果软件业务的灵魂人物,他在软件设计方面非常有天赋。外界一致认为他是继乔帮主之后的下一位帮主人选。但是乔帮主走后,他也没能继位。反而是选择了辞职。根据相关资料显示,也有他自己的原因吧,大神的世界我们不懂啊。
鼎鼎有名的安卓系统就是出自他手,我觉得有技术在手就是拽,他的就业跳槽经历也是蛮丰富的。1986年获得计算机学士学位。1989年仅26岁的他加入苹果公司。到后面加入微软。又再从微软离职。人生当中一直没有遇到伯乐啊。几经波折,最后遇到了伯乐谷歌,2005年他写的安卓系统被谷歌收购。他从苹果的一个开发人员,凭借着Android一直干到了Google移动平台副总裁、Android主管。并于2014年10从谷歌离职。
以上讲了这么多足足可以看出这两系统的优秀。以及市场份额庞大。但值得庆幸的是近几年面对美国的管制,为了不受制于人。我国 科技 巨头似乎也明白这个道理,也在涉足操作系统的研发。虽然目前完全取代Android系统是不可能的,但是未来可期啊。
你觉得我国的操作系统会超过安卓系统吗?欢迎评论区留言讨论!
谢谢您的问题。福斯特与鲁宾,确实有过人之处。
福斯特在苹果公司的牛。 福斯特于1992年加入了乔布斯创办的NeXT公司,1997年苹果收购NeXT,福斯特跟随乔布斯加盟苹果。按照苹果与乔布斯安排,福斯特先后负责了MAC OS与iOS系统的开发,是两大重要贡献的重要贡献者、奠基者。之后,福斯特负责的软件业务出现了两大失误,包括失败的苹果地图与不完善的Siri服务,福斯特不愿意道歉,他很可能是苹果公司设计、硬件两方高管意见不合、决策失误的牺牲品。作为乔布斯继任人选之一,福斯特不想在苹果继续任职,2012年离开苹果。
福斯特离开苹果公司的牛。 福斯特离职后,随着苹果产品的更加丰富、生态愈加完善,优化iOS系统更不容易,iOS系统升级后问题增加,iOS和MacOS的继任者显然不如福斯特深刻理解自己的产品。另一方面,福斯特又开启了自己另外一段开挂的人生,他联合制作的百老汇新音乐剧《欢乐窝》成功上映,技术狂人也有浪漫满屋。
安迪·鲁宾(Andy Rubin)的牛与不牛 。鲁宾也是技术发烧友,而且能做成产品。他设计了家庭影院系统、电脑程序控制的直升机、无人值守的POS 系统,很多想法在现在都是前瞻性。 2003 年,鲁宾基于长期持有的域名 Android.com 开发了 Android,安卓系统关键在于其开源,兼容五花八门的智能手机,逐步占有市场,其间鲁宾又投资了谷歌自动驾驶事业。不过,鲁宾有提前预判10年的眼光与能力,但是缺乏耐心、出手过急,技术之后的 社会 、文化和 科技 环境并不成熟,市场并不买账,导致其翻了一些跟头。
欢迎关注,批评指正。
一座摩天大楼,从来都不是凭空而来。同样的道理,好操作系统和生态环境,也都非一朝一夕。
这个世界上主流的操作系统内核,为什么只有Windows NT和Linux Kernel,因为他们的确很优秀啊,但是为什么基于这两种内核,最强大的生态系统只有Windows Desktop和Android?不仅仅是因为有个强大的爹,召集了全世界的开发者去帮它完善生态,但同样,它们自身也要足够优秀对不对?
所以,不要总是想着,人家的生态环境已经占领了市场,我们无法与之匹敌。那当年的Android又是如何把诺基亚,黑莓,微软等一众强大到可怕的敌人一一淘汰的?
在近一段时间里,笔者会经常听到在职iOS开发人员的各种吐槽,各种无奈,各种对于iOS市场唱衰,更是在某度搜索引擎上随便一点iOS就是各种负面新闻,事实上,经过笔者的一番了解,断定其实你们看到的一定是个假iOS!
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:551346706,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
一、2014-2015年间盛极一时,iOS开发人员可遇不可求
首先,咱们来谈谈iOS开发的早期经历。说起iOS开发在他最火的时候应该是2014-2016年左右,那个时候各种创业公司对于技术的渴望是多么的可遇不可求,就一度掀起了招聘iOS开发者的热潮,那个时候的市场,可谓是什么人都能够上的去,只要会一点界面开发你就是技术大牛,能做出项目经理的产品架构,那么你技术就是牛B,也是一时间洛阳纸贵,iOS开发人才变得可遇不可求,数量及其缺乏。在这个时候,有慧眼的技术从业者深知掌握“一技”,方能在社会上生存,“之长”方能得以长足发展;所以在这段时间果断选择了iOS开发,事实证明,敢于第一批吃螃蟹的人,他们是成功的典范;他们是iOS早期开发者;也从那个时候在逐渐成长起来,细数时间算来,应该有3年实践开发经验的开发者,注意这里用到的是早期开发者,并不是说iOS开发大神,后面我会解释为什么这样说。
二、2015年底-2016年底,遭遇面顶之灾面临行业洗牌
众所周知,iOS开发技术在之前那样缺乏的时间会让更多的人涌进来,而经济学告诉我们说,供不应求,引起物价上涨;当供大于求时,则相反。正是因为当时的iOS市场匮乏人才,很多其他语言开发者就临时抱佛脚,冲着高昂的薪资就转行做了iOS开发,还有一大批社会上准备学习技术就业的人群呈井喷似涌入iOS开发市场,那最后的结果势必是随着时间的推移、资本市场的寒冬、创业公司一批批倒闭,这对iOS的开发者需求量来说是逐渐呈现了饱和状态。
但是,伟大的适者生存理论告诉我们说,在这个竞争力突然加大、需求市场收紧的时代,有一大批应聘者已经被社会上消化掉,一大批应聘者已经被淘汰掉了。所以,过去盛极一时的时代过去了,大浪淘沙,相对来说留下的iOS开发者被要求能力水平更高,技术能力更强;这也就说明了,在行业内唱衰的iOS其实并不是受到了毁灭性的打击,只是大自然生存法则罢了,没办法,人多了一定会淘汰一批不适合的人。
三、2017iOS市场优胜劣汰,走出人生新高度
经过近几年的折腾,目前资本市场在逐渐平稳,创业者的创业公司也逐渐在失败中吸取教训,越来越多的创业者已经吸取更多的经验,就像前几天被刷屏的文章《就算老公一毛线股份都没拿到,在我心里,他依然是最牛逼的创业者》一样,感人至深,动之以情得说明了目前我们的生存现状,在当前竞争残酷的社会中,物竞天择,适者生存是永远不变的真理,iOS市场是这样的,能够真正适应的人方能走到最后。
目前还在培训iOS的机构屈指可数,当你问到他们为什么不培训iOS了?他们也许会说,iOS市场不行了,iOS找不到工作了!其实,并不然,是他们本身水平根本不够!培训出来的学生根本不能够足以市场的客观要求,不能够具备更强的水平而惨遭淘汰。其实,看到这里,聪明的你应该去搜索引擎上去搜索一下,iOS开发有谁还在持久战斗,有谁还能在这个行业里继续敢叫嚣,看看他们的薪资数据,用事实说话你会明白更多,也不光是iOS开发,在任何一个行业里面同样都适应这样的适者生存的法则,我们要做的就是努力适应争取更多。
四、没有人能阻挡你,只有你自己不努力
最后,只想奉劝所有看官一句,盲人摸象,人云亦云,有些事情需要自己去真正去实践,你看到的不一定是真实的,你听到的也不一定是真实的,只有你自己努力奋斗了,才是最踏踏实实的体验。就像韩寒说过,虽然听过很多大道理,却依然过不好这一生。其实不无道理,没人能够阻挡你,只有你自己不努力。
有时,选择大于努力,在选择进入你想要进入的行业之前调查是必然的,但是也相信自己的慧眼,不要盲目跟从市场。逻辑教育iOS学院一如既往的服务于每个学员,培养学生成为“iOS中高级开发者”被无数企业疯抢,面对竞争无所畏惧,拿offer拿到手发软,拿高薪资拿到父母笑,能有这样精彩的人生,相信你也会感谢这样努力的自己。
五、只要你愿意,你也可以成为这样的“大神”
对了,上文我们提到了早期开发者是叫做早期开发者,为什么不是叫做开发大神。笔者是这样认为的,凡是大神者,定是有受人仰慕的精神或拥有超过技能的能力;如果你这个人技术水平高,什么开发难题都难不倒,但是你人品不行,不懂得分享,自认为有超过的技术水平就看不起或者是鄙视他人,那这人一定不受人仰慕就一定不是什么大神了,最多是开发能力者。
所以,笔者也是在这里提倡,无论是什么样的技术从业人员,都希望你有好的思想品质,拥有勤奋好学的精神,能够积极向上的努力,就是遇到社会上再残酷的竞争也会有自己的栖身之所的,相信因果,己所不欲勿施于人,社会再淘汰的话,我相信这样的大神还是能够存在并且立足的,能力再稍高一些,无论他的出身如何,笔者更愿意称呼这样的人为“技术大神”。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:551346706,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
1、世上无难事,只要肯登攀!
2、谁说只能干到30岁,你要学IOS开发,他的创始是乔布斯,他是干到死的,微软的比尔,那么有钱,退休了,现在全力研究声控技术、生物技术与计算机技术相结合 。
所以,真想学,与其在此发问,不如,拿起IOS开发手册,与其问干到30岁,不如等到你30岁再说,就算30岁后不干了,至少还可以干两年。
1.定义函数时,希望传入的参数不为nil,或者为nil时会有警告显示:
如下:
- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark
__atttribute__((nonnull(1, 2)));
p.s. index从1开始,不是0,且只对对象生效。
该技巧同样来自,sunnyxx大神的微信,逗比狗~
2.定义函数时,希望子类override该方法时候,必须调用super,否则编译器直接报错。
@interface OldSix:NSObject
- (void)fooWithNothing __attribute__((objc_requires_super));
该技巧同样来自,sunnyxx大神的微信,逗比狗~
wait~~~~~
/*检查子类在重写该方法时有没有调用自己(父类)的实现
*对于一些可以被继承的类,需要子类在重某一调用父类的实现以保证正确的行为,通过在头文件方法的声明末尾添加`NS_REQUIRES_SUPER`
*可以让编译器检查子类方法有调用父类的实现。具体使用方法如下:
* - (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;
*/
但是根据我的实际测试,发现sunnyxx大神仙的方法,没有任何显示效果,不知道是不是我打开的方式不对还是怎么,
总之,NS_REQUIRES_SUPER的方法亲测可用。
3.误删系统sdk头文件的解决办法
在终端中输入:
$ cd ~/Library/Developer/Xcode/DerivedData/ModuleCache/
$ rm -rf *
4.ARC下打印retainCount
extern uintptr_t _objc_rootRetainCount(id obj);
id test = [NSString new];
NSLog(@"retain count %lu",_objc_rootRetainCount(test));
5.工程报错下,仍然可以编译成功
6.定位方法的调用者
基础
一定的编程经验
这里说的编程经验是至少熟练一门编程语言,对 OOP 有一定的了解,最好熟悉一些基本的设计模式。遇到过的好多 iOS 开发,大多是从别的语言转过来的,所以有一定的编程基础,学起来会更容易 get the point.
如果是第一次接触编程,当然也是没问题的,只是要做好心理准备,可能会比想象的难。
英语
发现不少开发对于英语似乎有点接受不能,通常都是中文优先,除非迫不得已,才硬着头皮看看 StackOverflow,英文文章,文档等。忘了是谁说过「难走的路越走越好走」,通常如此。其实只要稍微 push 一下自己,那些技术文章啃下来应该不会有太大的问题,有过几次成功的体验后,这种恐惧感就会减少很多。优质的文章、视频、书籍,多是英文的,不迈过这个 坎,将来要么成为瓶颈,要么花更大的成本去填补。
入门
书籍
要学习 iOS 开发,自然要先学 Objective-C (当然现在也可以直接上 Swift,不过如果多人协作的话,OC目前还是主流),因为 OC 是 C 语言的超集,所以了解 C 语言对于学习 OC 肯定会有帮助,不过就算不了解,直接学 OC 也没太大问题。
这里推荐 BNR (Big Nerd Ranch) 的这本 Objective-C Programming The Big Nerd Ranch Guide,讲解地比较细致,能帮助你更好的理解 OC,更重要的是教你遇到问题时,如何去解决问题,以及这个问题对应的一些知识点,如何使用文档等等。
来到一个新的世界,肯定会对这个世界充满好奇,想订阅一大堆博客,买一堆书,看各种教程和视频,然后就变得浮躁,不知该从哪下手,这会导致拖延症。 我渴了,给我倒一杯水,这个很直接,马上就可以做,但如果是给我买一瓶饮料,而自己对那些饮料又不怎么熟悉时,就纠结了,不如刷会微博,看看朋友圈,玩个小游戏先。
所以一本好的入门教材很重要,要契合自己当前的水平,且常常会有收获,这种成就感会激励着你继续学下去。
在看书的过程中,往往会有这样的经历:书中提到某个人、观点、知识点、书、文章,然后就顺着它提到的这些东西出去了,可能某个知识点又牵扯到另一些内容,然后就这样越走越远。想起了一个故事——
三只猎狗追一只土拔鼠,土拔鼠逃跑时钻进了一个树洞。这个树洞只有一个出口,不一会儿,忽然从树洞里跑出一只兔子。兔子飞快地向前跑,并爬上另一棵大树。兔子因为慌乱在树上没站稳,掉了下来,砸晕了正仰头看的三只猎狗,最后,兔子终于逃脱。
对于这个故事可以从不同的角度去解读,我更愿意以初心去解读。兔子为什么会爬树?为什么能砸晕三只猎狗?这不是重点,重点是,之前追赶的土拨鼠哪去了?看书时难免会有延伸阅读,这个深度我觉得不宜超过 2 层,不然很容易就回不来了。
还有就是如果有可能,最好每天都看点,这其实是很难的,因为总是会有优先级更高的事,或者之前的某些习惯在干扰。一旦断了几天,就不想再拿起来了。
还有,苹果官方的 Start Developing iOS Apps Today 也是很不错的入门材料。
视频
推荐斯坦福老头子(Paul Hegarty)的 Developing iOS 7 Apps for iPhone and iPad ,当初也是看的这个(那时还是更老的版本),Paul 是资深的 Mac/iOS 开发(前苹果员工?),很多知识点讲得很到位,学生们的提问也大都在点上,同时配有Demo,总之听下来会对 iOS 开发有比较全面的了解。
同时推荐一本小册子:objc-zen-book,花不长时间就能看完,里面是一些 Best Practices,对于编写优质代码会很有帮助。
笔记
这是一个持久的过程,任何阶段都适用。以前也没太在意这个,觉得概念性的东西,脑子过一遍,就大概知道了,然后就去啃其他的东西了,现在看来,如果有记笔记的话,会更有助于消化概念、知识点,也可以记录自己的思考过程。达芬奇就记录了10000多页的笔记。
记笔记可以加深对知识点的理解,而成为编程巨星的唯一秘诀就是:对所做的事情理解地越深,就会做得越好。同时如果遵循遗忘曲线去复习的话,效果更佳。对知识点了解地足够透彻后,Debug 时才更有可能知道问题出在哪,解决问题也更容易有思路。
笔记不仅可以记知识点,也可以记录调试过程,比如这篇笔记,有一种调试方法:小黄鸭调试法
许多程序员都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题,就在解释的过程中击中了问题的解决方案。一边阐述代码的意图一边观察它实际上的意图并做调试,这两者之间的任何不协调会变得很明显,并且更容易发现自己的错误。
生活中我们可能不会真的这么去做,这时抽离出另一个自己,记录下跟ta的对话,也是个发现问题的好方法。
练习
这也是一个持续的过程,知道了些概念或原理后,总是会想着去验证下是不是这样,无论结果是否如自己预期,实践的过程会降低对语言的陌生感,慢慢地培养一种驾驭这门语言的自信,如果出了错,正好可以重新梳理一下。
目标
如果静下心来看完了 BNR 的这本书,以及斯坦福的 iOS 开发视频,那么对 OC 应该比较了解了,一些常用的 UIKit 用起来也没什么问题了,比如 UIViewController / UIView / UIScrollView / UIImageView / UITableView。也熟悉一些概念,如 KVO / MVC / Delegate / DataSource。
这个阶段下来,应该会有:哦,iOS 开发也就这样嘛,多翻翻文档,熟悉 Cocoa Touch 的一些 Class,差不多也能做出一个简单的 App 了。
进阶
入门之后,接下来可以折腾的东西还会有不少。
书籍
Effective Objective-C 2.0,里面提到了 52 种提高 iOS App 质量的途径。涉及了 API 设计、protocols / category 的使用、写出更模块化的代码等,读下来应该会有不少收获。
iOS Programming: The Big Nerd Ranch Guide (4th Edition),又是一本 BNR 的书,这本书的特点是通过 Demo 来引出知识点,然后提一些问题,并且会细说解题思路。看书的过程中,对于元学习能力的提升也会有一定帮助。
--- update ---
发现巧哥的 iOS开发进阶 已经可以在京东买到了,虽然没有细看,但巧哥出品质量肯定有保障。
其他资源
进入这个阶段后,可以去探索更大的世界了,现在的资源已经很丰富了,但还是要遵循「少而精」的原则。以下是我觉得挺不错的资源
iOS Dev Weekly 每周一期,内容多为这一星期里值得关注的Github项目、文章、工具等。
iOS 移动开发周报 这是唐巧大大整理的每周不错的 iOS 开发相关的内容,多为中文。
RayWenderlich 很多详细又全面的教程,不容错过。
iOS Dev Slack 国内不少 iOS 开发(包括大大们)都在这里,不过现在好像不怎么能拿到邀请了。
中文 iOS/Mac 开发博客列表,打开工具订阅吧。
还有,如果可能的话,多去分享自己学到的东西,教是最好的学,我试过几次,效果真的很不错。
目标
这个阶段下来,对于常用的设计模式、内存管理、Blocks 的使用、图像操作、网络请求和管理、多线程应该比较熟悉了。对于 CALayer、Animation、UIScrollView、UITableView、UICollectionView、 ViewController Container 则非常熟悉,对「非常熟悉」的定义是:不打开 Xcode,脑子里就能把相应的知识点复述出来 80% ,比如这个类有哪些方法,Delegate / DataSource 有哪些方法,怎么使用,如果要实现某个效果,应该怎么做(好吧, UICollectionView 除外)。
高级
其实高级、进阶、入门并没有严格的界限,在入门阶段也可以探究高级阶段的一些东西。我觉得支撑我们不断探索和前进的动力不是兴趣,而是永不满足的好奇心,和对优雅代码的追求。
If your standards are low, you're going to stop pretty early on in the process.
BNR 的这篇 Leveling Up 已经讲得很好了,也更加细致。
书籍
iOS 7 Programming Pushing the Limits 这本书对 iOS 7 的一些特性会讲解地比较深入,当然也不仅仅是 iOS 7。只叹 iOS 更新实在太快,书籍往往跟不上,一本好书往往需要很长时间来撰写,等书可以出版了,iOS 又出新版本了。
源码
看优秀的源码,可以学到很多东西,使用过程中遇到问题也更容易解决。这些是我觉得值得细看的源码:AFNetworking(NSOperation, HTTP, Block), SDWebImage(Image Handle, Cache, NSOperation, Block),SVPullToRefresh(UIScrollView, State Handle), JSONModel(runtime)
如果有兴趣,也可以翻翻 CoreFoundation / OC runtime 的源码。
资源
oleb
NSHipster
objc.io || objcio.cn
WWDC 视频
工具
chisel Facebook 出品的 LLDB 助手,用于调试很方便
Reveal 每当好奇某个 App 的实现时,都会打开它一窥究竟,用于调试自己的 App 也很方便
Aspects steipete 大大出品的一款方便使用 method swizzling 的工具,可以在运行时动态添加代码到某个方法
class-dump 从 Mach-O 文件生成 OC 头文件,有时想看看某个 App 大概是如何组织的会比较方便
Hopper 可以对二进制文件进行反编译,甚至可以生成伪代码!有时想看看 UIViewController 里某个方法大概是怎么实现的,就可以用它。
Instruments 这个内置的工具对于发现 App 的各种问题很有帮助,如内存占用、泄露,渲染问题等。
目标
这个阶段,对于底层的实现会有更深入的了解,各种 Core 开头的 Framework 至少可以说出个大概,工具也能熟练使用,「正经的代码」写过数万行,可能天天在翻 Dash。如果别人让你实现某个功能,能在较短的时间内给出不错的实现方案,并且足够细致,甚至精细到如何使用 Core Graphic 去画某个图像。
其他
我觉得无论学习什么,「速成」的心态是最要不得的,这只会让自己变得浮躁,一知半解,整个过程也很难让自己的元学习能力得到提升。慢慢来,攻占一个城后,再去打下一个,这时心态也会平和许多。