基礎(chǔ)
創(chuàng)新互聯(lián)專注于管城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供管城營銷型網(wǎng)站建設(shè),管城網(wǎng)站制作、管城網(wǎng)頁設(shè)計、管城網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造管城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供管城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
一定的編程經(jīng)驗
這里說的編程經(jīng)驗是至少熟練一門編程語言,對 OOP 有一定的了解,最好熟悉一些基本的設(shè)計模式。遇到過的好多 iOS 開發(fā),大多是從別的語言轉(zhuǎn)過來的,所以有一定的編程基礎(chǔ),學(xué)起來會更容易 get the point.
如果是第一次接觸編程,當然也是沒問題的,只是要做好心理準備,可能會比想象的難。
英語
發(fā)現(xiàn)不少開發(fā)對于英語似乎有點接受不能,通常都是中文優(yōu)先,除非迫不得已,才硬著頭皮看看 StackOverflow,英文文章,文檔等。忘了是誰說過「難走的路越走越好走」,通常如此。其實只要稍微 push 一下自己,那些技術(shù)文章啃下來應(yīng)該不會有太大的問題,有過幾次成功的體驗后,這種恐懼感就會減少很多。優(yōu)質(zhì)的文章、視頻、書籍,多是英文的,不邁過這個 坎,將來要么成為瓶頸,要么花更大的成本去填補。
入門
書籍
要學(xué)習(xí) iOS 開發(fā),自然要先學(xué) Objective-C (當然現(xiàn)在也可以直接上 Swift,不過如果多人協(xié)作的話,OC目前還是主流),因為 OC 是 C 語言的超集,所以了解 C 語言對于學(xué)習(xí) OC 肯定會有幫助,不過就算不了解,直接學(xué) OC 也沒太大問題。
這里推薦 BNR (Big Nerd Ranch) 的這本 Objective-C Programming The Big Nerd Ranch Guide,講解地比較細致,能幫助你更好的理解 OC,更重要的是教你遇到問題時,如何去解決問題,以及這個問題對應(yīng)的一些知識點,如何使用文檔等等。
來到一個新的世界,肯定會對這個世界充滿好奇,想訂閱一大堆博客,買一堆書,看各種教程和視頻,然后就變得浮躁,不知該從哪下手,這會導(dǎo)致拖延癥。 我渴了,給我倒一杯水,這個很直接,馬上就可以做,但如果是給我買一瓶飲料,而自己對那些飲料又不怎么熟悉時,就糾結(jié)了,不如刷會微博,看看朋友圈,玩?zhèn)€小游戲先。
所以一本好的入門教材很重要,要契合自己當前的水平,且常常會有收獲,這種成就感會激勵著你繼續(xù)學(xué)下去。
在看書的過程中,往往會有這樣的經(jīng)歷:書中提到某個人、觀點、知識點、書、文章,然后就順著它提到的這些東西出去了,可能某個知識點又牽扯到另一些內(nèi)容,然后就這樣越走越遠。想起了一個故事——
三只獵狗追一只土拔鼠,土拔鼠逃跑時鉆進了一個樹洞。這個樹洞只有一個出口,不一會兒,忽然從樹洞里跑出一只兔子。兔子飛快地向前跑,并爬上另一棵大樹。兔子因為慌亂在樹上沒站穩(wěn),掉了下來,砸暈了正仰頭看的三只獵狗,最后,兔子終于逃脫。
對于這個故事可以從不同的角度去解讀,我更愿意以初心去解讀。兔子為什么會爬樹?為什么能砸暈三只獵狗?這不是重點,重點是,之前追趕的土撥鼠哪去了?看書時難免會有延伸閱讀,這個深度我覺得不宜超過 2 層,不然很容易就回不來了。
還有就是如果有可能,最好每天都看點,這其實是很難的,因為總是會有優(yōu)先級更高的事,或者之前的某些習(xí)慣在干擾。一旦斷了幾天,就不想再拿起來了。
還有,蘋果官方的 Start Developing iOS Apps Today 也是很不錯的入門材料。
視頻
推薦斯坦福老頭子(Paul Hegarty)的 Developing iOS 7 Apps for iPhone and iPad ,當初也是看的這個(那時還是更老的版本),Paul 是資深的 Mac/iOS 開發(fā)(前蘋果員工?),很多知識點講得很到位,學(xué)生們的提問也大都在點上,同時配有Demo,總之聽下來會對 iOS 開發(fā)有比較全面的了解。
同時推薦一本小冊子:objc-zen-book,花不長時間就能看完,里面是一些 Best Practices,對于編寫優(yōu)質(zhì)代碼會很有幫助。
筆記
這是一個持久的過程,任何階段都適用。以前也沒太在意這個,覺得概念性的東西,腦子過一遍,就大概知道了,然后就去啃其他的東西了,現(xiàn)在看來,如果有記筆記的話,會更有助于消化概念、知識點,也可以記錄自己的思考過程。達芬奇就記錄了10000多頁的筆記。
記筆記可以加深對知識點的理解,而成為編程巨星的唯一秘訣就是:對所做的事情理解地越深,就會做得越好。同時如果遵循遺忘曲線去復(fù)習(xí)的話,效果更佳。對知識點了解地足夠透徹后,Debug 時才更有可能知道問題出在哪,解決問題也更容易有思路。
筆記不僅可以記知識點,也可以記錄調(diào)試過程,比如這篇筆記,有一種調(diào)試方法:小黃鴨調(diào)試法
許多程序員都有過向別人(甚至可能向完全不會編程的人)提問及解釋編程問題,就在解釋的過程中擊中了問題的解決方案。一邊闡述代碼的意圖一邊觀察它實際上的意圖并做調(diào)試,這兩者之間的任何不協(xié)調(diào)會變得很明顯,并且更容易發(fā)現(xiàn)自己的錯誤。
生活中我們可能不會真的這么去做,這時抽離出另一個自己,記錄下跟ta的對話,也是個發(fā)現(xiàn)問題的好方法。
練習(xí)
這也是一個持續(xù)的過程,知道了些概念或原理后,總是會想著去驗證下是不是這樣,無論結(jié)果是否如自己預(yù)期,實踐的過程會降低對語言的陌生感,慢慢地培養(yǎng)一種駕馭這門語言的自信,如果出了錯,正好可以重新梳理一下。
目標
如果靜下心來看完了 BNR 的這本書,以及斯坦福的 iOS 開發(fā)視頻,那么對 OC 應(yīng)該比較了解了,一些常用的 UIKit 用起來也沒什么問題了,比如 UIViewController / UIView / UIScrollView / UIImageView / UITableView。也熟悉一些概念,如 KVO / MVC / Delegate / DataSource。
這個階段下來,應(yīng)該會有:哦,iOS 開發(fā)也就這樣嘛,多翻翻文檔,熟悉 Cocoa Touch 的一些 Class,差不多也能做出一個簡單的 App 了。
進階
入門之后,接下來可以折騰的東西還會有不少。
書籍
Effective Objective-C 2.0,里面提到了 52 種提高 iOS App 質(zhì)量的途徑。涉及了 API 設(shè)計、protocols / category 的使用、寫出更模塊化的代碼等,讀下來應(yīng)該會有不少收獲。
iOS Programming: The Big Nerd Ranch Guide (4th Edition),又是一本 BNR 的書,這本書的特點是通過 Demo 來引出知識點,然后提一些問題,并且會細說解題思路??磿倪^程中,對于元學(xué)習(xí)能力的提升也會有一定幫助。
--- update ---
發(fā)現(xiàn)巧哥的 iOS開發(fā)進階 已經(jīng)可以在京東買到了,雖然沒有細看,但巧哥出品質(zhì)量肯定有保障。
其他資源
進入這個階段后,可以去探索更大的世界了,現(xiàn)在的資源已經(jīng)很豐富了,但還是要遵循「少而精」的原則。以下是我覺得挺不錯的資源
iOS Dev Weekly 每周一期,內(nèi)容多為這一星期里值得關(guān)注的Github項目、文章、工具等。
iOS 移動開發(fā)周報 這是唐巧大大整理的每周不錯的 iOS 開發(fā)相關(guān)的內(nèi)容,多為中文。
RayWenderlich 很多詳細又全面的教程,不容錯過。
iOS Dev Slack 國內(nèi)不少 iOS 開發(fā)(包括大大們)都在這里,不過現(xiàn)在好像不怎么能拿到邀請了。
中文 iOS/Mac 開發(fā)博客列表,打開工具訂閱吧。
還有,如果可能的話,多去分享自己學(xué)到的東西,教是最好的學(xué),我試過幾次,效果真的很不錯。
目標
這個階段下來,對于常用的設(shè)計模式、內(nèi)存管理、Blocks 的使用、圖像操作、網(wǎng)絡(luò)請求和管理、多線程應(yīng)該比較熟悉了。對于 CALayer、Animation、UIScrollView、UITableView、UICollectionView、 ViewController Container 則非常熟悉,對「非常熟悉」的定義是:不打開 Xcode,腦子里就能把相應(yīng)的知識點復(fù)述出來 80% ,比如這個類有哪些方法,Delegate / DataSource 有哪些方法,怎么使用,如果要實現(xiàn)某個效果,應(yīng)該怎么做(好吧, UICollectionView 除外)。
高級
其實高級、進階、入門并沒有嚴格的界限,在入門階段也可以探究高級階段的一些東西。我覺得支撐我們不斷探索和前進的動力不是興趣,而是永不滿足的好奇心,和對優(yōu)雅代碼的追求。
If your standards are low, you're going to stop pretty early on in the process.
BNR 的這篇 Leveling Up 已經(jīng)講得很好了,也更加細致。
書籍
iOS 7 Programming Pushing the Limits 這本書對 iOS 7 的一些特性會講解地比較深入,當然也不僅僅是 iOS 7。只嘆 iOS 更新實在太快,書籍往往跟不上,一本好書往往需要很長時間來撰寫,等書可以出版了,iOS 又出新版本了。
源碼
看優(yōu)秀的源碼,可以學(xué)到很多東西,使用過程中遇到問題也更容易解決。這些是我覺得值得細看的源碼: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 助手,用于調(diào)試很方便
Reveal 每當好奇某個 App 的實現(xiàn)時,都會打開它一窺究竟,用于調(diào)試自己的 App 也很方便
Aspects steipete 大大出品的一款方便使用 method swizzling 的工具,可以在運行時動態(tài)添加代碼到某個方法
class-dump 從 Mach-O 文件生成 OC 頭文件,有時想看看某個 App 大概是如何組織的會比較方便
Hopper 可以對二進制文件進行反編譯,甚至可以生成偽代碼!有時想看看 UIViewController 里某個方法大概是怎么實現(xiàn)的,就可以用它。
Instruments 這個內(nèi)置的工具對于發(fā)現(xiàn) App 的各種問題很有幫助,如內(nèi)存占用、泄露,渲染問題等。
目標
這個階段,對于底層的實現(xiàn)會有更深入的了解,各種 Core 開頭的 Framework 至少可以說出個大概,工具也能熟練使用,「正經(jīng)的代碼」寫過數(shù)萬行,可能天天在翻 Dash。如果別人讓你實現(xiàn)某個功能,能在較短的時間內(nèi)給出不錯的實現(xiàn)方案,并且足夠細致,甚至精細到如何使用 Core Graphic 去畫某個圖像。
其他
我覺得無論學(xué)習(xí)什么,「速成」的心態(tài)是最要不得的,這只會讓自己變得浮躁,一知半解,整個過程也很難讓自己的元學(xué)習(xí)能力得到提升。慢慢來,攻占一個城后,再去打下一個,這時心態(tài)也會平和許多。
一、iOS開發(fā)語言主要包括:C語言基礎(chǔ)、Obiective-C編程、Swift、UIKit框架
C語言基礎(chǔ) C語言是開發(fā)語言的基礎(chǔ),是最常用的一門程序設(shè)計語言,最常用于編寫計算機程序。
Obiective-C編程 Obiective-C是在C語言的基礎(chǔ)上,加入面向?qū)ο筇匦詳U充而成的通用型高級編程語言。
Swift是蘋果新開發(fā)的語言,目的就是取代OC,我也正在學(xué)習(xí),最大感受就是簡潔與效率高 UIKit框架詳解 UIKit框架是iPhone應(yīng)用程序開發(fā)中最基本的框架,也是最常用到及最重要的框架。
語言基本上都是差不多的,只是換了一種寫法,更甚至可以說編程上思想都基本相同,只是換了一種表達方式。
二、最基本的頭文件
OC中的頭文件和實現(xiàn)文件
.h文件類似C++中的.h文件
.m文件類似.cpp文件
頭文件作用也都差不多,聲明一些函數(shù)方法,屬性或變量,作用都是提供接口
Swift不一樣,沒有頭文件??!直接用便可。
所有實現(xiàn)文件后綴都是.swift C++導(dǎo)入頭文件是用#include OC導(dǎo)入頭文件可以用#include和 #import,但是一般我們都用#import,例如 #import “ViewController.h"
因為#import導(dǎo)入同一個頭文件多次也只會導(dǎo)入一次(已經(jīng)導(dǎo)入會被忽略),防止重復(fù)導(dǎo)入
OC還有一種用法是@class 類名,這樣告訴編譯器這是一個類,不要管他的內(nèi)部細節(jié),這樣提高了效率,防止了頭文件的循環(huán)引用,當然你不能訪問這個類的內(nèi)部細節(jié)
Swift也需要導(dǎo)入一些框架,直接import就行,不用#,例如 import Foundation
三、基本的數(shù)據(jù)類型
接下來我們來看一下基本的數(shù)據(jù)類型,我就說一些比較常用的吧,C++的我就不說了。 OC中的數(shù)據(jù)類型
OC中很多數(shù)據(jù)類型都有NS前綴,那算因為OC是喬布斯第一次離開蘋果后創(chuàng)建的公司NextStep所開發(fā)的,所以就有NS
數(shù)據(jù)類型我只是用一些簡單直白的創(chuàng)建方式,其實還有很多種創(chuàng)建方式
四、Swift
Swift的數(shù)據(jù)類型也差不多,無非就是Int,Float,Double,String這些
例如 var str = @“hello world”
編譯器便會自動推斷str為String類型
Swift中聲明類型一般用let,和var,let表示定義常量,var定義變量
var a = 1 把a推導(dǎo)為Int 當然你也可以寫上類型 var a: Int = 1
在Swift中可以省略分號,寫和不寫都行,但定義兩個變量放在同一行就要,分隔開嘛
當然Swift對比OC也多了很多東西,例如元組tuple,閉包Closure等,很多用起來很簡潔的東西
IOS設(shè)備一旦升級IOS系統(tǒng)就無法降級了,因為:
1、IOS采用推薦升級、強制保持最新的升級策略,一旦升級就再無可能降級。
2、強制保持最新系統(tǒng)版本是為了防止低版本中存在的漏洞對用戶造成信息泄露。
3、蘋果自IOS7推出ID鎖,禁止降級是為了防止有人偷盜手機通過降級的方法重新使用手機,以此降低iPhone被盜率。
....千峰....一下子沒反應(yīng)過來是什么網(wǎng)站.....然后才發(fā)現(xiàn):不就是個培訓(xùn)機構(gòu)么....一樓什么心態(tài)
論壇國內(nèi)的自然是 CocoaChina 啊. 大牛出沒的地方.
以前還有 code4App 找源碼的,不過現(xiàn)在 CocoaChina 也有 這個功能了.
可以說, CocoaChina 是國內(nèi)的 Stackoverflow.. 圣地
比較好的是好程序員特訓(xùn)營論壇,也有很多IOS開發(fā)學(xué)習(xí)群,可以加入到里面跟他們交流。不過吃哪家啊培訓(xùn)機構(gòu)的輔導(dǎo)班會更好一些,有問題可以直接達到解答。論壇上的解答沒有那么及時,相對也不是很專業(yè)。
elevenbeta開發(fā)者社區(qū)你可能已經(jīng)是一個編程社區(qū)的成員,只是你自己還沒有意識到。例如那些正在學(xué)習(xí)python Java 和 Ruby等語言的人,會經(jīng)常光顧一些網(wǎng)站。這些網(wǎng)站已經(jīng)形成了圍繞自身的社區(qū)。elevenbeta開發(fā)者社區(qū)以及它們的資訊平臺是這些網(wǎng)站中的典范。
像我們表格中提供的社區(qū)給我們提供交談的“空間”,讓我們問可以問一些合適的問題,這里的人往往會樂于幫助你們,提供一些建議和不同的觀點來處理你程序中問題。這些社區(qū)的一個要素就是請在詢問他們之前,自己先對問題進行研究!還有什么呢?
實時的信息以及正在解決的問題
透徹的回答以及新的觀點
對所有水平程序員的貼士和技巧
資源,討論以及相關(guān)論文的鏈接
認識新朋友,編程方面的好兄弟和潛在的搭檔
要想以一人之力試圖去掌控以上所有的事情是幾乎不可能的,會常常讓人沮喪。加入一個編程者社區(qū)中,鼓勵自己參與到其中,對那些花時間回答你問題的人心存感激。這樣你會走得更遠。
在編程社區(qū)期望獲得什么呢
你應(yīng)該希望專業(yè)的回答和解決方案,少一些廢話。 歸根結(jié)底就是希望能夠?qū)δ愕膯栴}直入主題,提供多一些的資源以及幫助你解決問題。你可以放心,僅去年一年,關(guān)于如何在python中如何建立一個web scraper就被涉及過至少1000次花點時間去學(xué)習(xí)上面的這些條目,你會經(jīng)常遇見它們。知道一個人什么時候是嚴肅的什么時候僅僅是在刺激你的神經(jīng)很是重要。精英和老手傾向于抱怨處理事情的新方式。
編程社區(qū)的類型
最后一件我想說的是關(guān)于我們要參加社區(qū)的類型,哪些社區(qū)是供我們提問問題的,哪些是讓我們直接學(xué)習(xí)的,同時哪些又是給我們提供資源和一些有趣的素材的。
對下面這些熟悉嗎?
1. 公告板—問題,答案和討論
2. UGC(用戶原創(chuàng)內(nèi)容)—深刻的見解,經(jīng)驗以及資源
3. 社交導(dǎo)向的—討論,試驗和錯誤
我知道以上這些類型的社區(qū),你每種至少能說出一個來。我一點都不想阻礙你,請記住所有的這些編程社區(qū)功能性就像現(xiàn)實世界的社區(qū)一樣。
有問題?那就去評論框吧