重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
基础
专业领域包括网站制作、做网站、购物商城网站建设、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,创新互联的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。
一定的编程经验
这里说的编程经验是至少熟练一门编程语言,对 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 去画某个图像。
其他
我觉得无论学习什么,「速成」的心态是最要不得的,这只会让自己变得浮躁,一知半解,整个过程也很难让自己的元学习能力得到提升。慢慢来,攻占一个城后,再去打下一个,这时心态也会平和许多。
比较好的是好程序员特训营论坛,也有很多IOS开发学习群,可以加入到里面跟他们交流。不过吃哪家啊培训机构的辅导班会更好一些,有问题可以直接达到解答。论坛上的解答没有那么及时,相对也不是很专业。
一、iOS开发语言主要包括:C语言基础、Obiective-C编程、Swift、UIKit框架
C语言基础 C语言是开发语言的基础,是最常用的一门程序设计语言,最常用于编写计算机程序。
Obiective-C编程 Obiective-C是在C语言的基础上,加入面向对象特性扩充而成的通用型高级编程语言。
Swift是苹果新开发的语言,目的就是取代OC,我也正在学习,最大感受就是简洁与效率高 UIKit框架详解 UIKit框架是iPhone应用程序开发中最基本的框架,也是最常用到及最重要的框架。
语言基本上都是差不多的,只是换了一种写法,更甚至可以说编程上思想都基本相同,只是换了一种表达方式。
二、最基本的头文件
OC中的头文件和实现文件
.h文件类似C++中的.h文件
.m文件类似.cpp文件
头文件作用也都差不多,声明一些函数方法,属性或变量,作用都是提供接口
Swift不一样,没有头文件!!直接用便可。
所有实现文件后缀都是.swift C++导入头文件是用#include OC导入头文件可以用#include和 #import,但是一般我们都用#import,例如 #import “ViewController.h"
因为#import导入同一个头文件多次也只会导入一次(已经导入会被忽略),防止重复导入
OC还有一种用法是@class 类名,这样告诉编译器这是一个类,不要管他的内部细节,这样提高了效率,防止了头文件的循环引用,当然你不能访问这个类的内部细节
Swift也需要导入一些框架,直接import就行,不用#,例如 import Foundation
三、基本的数据类型
接下来我们来看一下基本的数据类型,我就说一些比较常用的吧,C++的我就不说了。 OC中的数据类型
OC中很多数据类型都有NS前缀,那算因为OC是乔布斯第一次离开苹果后创建的公司NextStep所开发的,所以就有NS
数据类型我只是用一些简单直白的创建方式,其实还有很多种创建方式
四、Swift
Swift的数据类型也差不多,无非就是Int,Float,Double,String这些
例如 var str = @“hello world”
编译器便会自动推断str为String类型
Swift中声明类型一般用let,和var,let表示定义常量,var定义变量
var a = 1 把a推导为Int 当然你也可以写上类型 var a: Int = 1
在Swift中可以省略分号,写和不写都行,但定义两个变量放在同一行就要,分隔开嘛
当然Swift对比OC也多了很多东西,例如元组tuple,闭包Closure等,很多用起来很简洁的东西
elevenbeta开发者社区你可能已经是一个编程社区的成员,只是你自己还没有意识到。例如那些正在学习python Java 和 Ruby等语言的人,会经常光顾一些网站。这些网站已经形成了围绕自身的社区。elevenbeta开发者社区以及它们的资讯平台是这些网站中的典范。
像我们表格中提供的社区给我们提供交谈的“空间”,让我们问可以问一些合适的问题,这里的人往往会乐于帮助你们,提供一些建议和不同的观点来处理你程序中问题。这些社区的一个要素就是请在询问他们之前,自己先对问题进行研究!还有什么呢?
实时的信息以及正在解决的问题
透彻的回答以及新的观点
对所有水平程序员的贴士和技巧
资源,讨论以及相关论文的链接
认识新朋友,编程方面的好兄弟和潜在的搭档
要想以一人之力试图去掌控以上所有的事情是几乎不可能的,会常常让人沮丧。加入一个编程者社区中,鼓励自己参与到其中,对那些花时间回答你问题的人心存感激。这样你会走得更远。
在编程社区期望获得什么呢
你应该希望专业的回答和解决方案,少一些废话。 归根结底就是希望能够对你的问题直入主题,提供多一些的资源以及帮助你解决问题。你可以放心,仅去年一年,关于如何在python中如何建立一个web scraper就被涉及过至少1000次花点时间去学习上面的这些条目,你会经常遇见它们。知道一个人什么时候是严肃的什么时候仅仅是在刺激你的神经很是重要。精英和老手倾向于抱怨处理事情的新方式。
编程社区的类型
最后一件我想说的是关于我们要参加社区的类型,哪些社区是供我们提问问题的,哪些是让我们直接学习的,同时哪些又是给我们提供资源和一些有趣的素材的。
对下面这些熟悉吗?
1. 公告板—问题,答案和讨论
2. UGC(用户原创内容)—深刻的见解,经验以及资源
3. 社交导向的—讨论,试验和错误
我知道以上这些类型的社区,你每种至少能说出一个来。我一点都不想阻碍你,请记住所有的这些编程社区功能性就像现实世界的社区一样。
有问题?那就去评论框吧
IOS设备一旦升级IOS系统就无法降级了,因为:
1、IOS采用推荐升级、强制保持最新的升级策略,一旦升级就再无可能降级。
2、强制保持最新系统版本是为了防止低版本中存在的漏洞对用户造成信息泄露。
3、苹果自IOS7推出ID锁,禁止降级是为了防止有人偷盗手机通过降级的方法重新使用手机,以此降低iPhone被盗率。
....千峰....一下子没反应过来是什么网站.....然后才发现:不就是个培训机构么....一楼什么心态
论坛国内的自然是 CocoaChina 啊. 大牛出没的地方.
以前还有 code4App 找源码的,不过现在 CocoaChina 也有 这个功能了.
可以说, CocoaChina 是国内的 Stackoverflow.. 圣地