Android 開發工程師轉型做 iOS 開發,需要做哪些準備工作?多久能上手iOS 開發?

各位前輩好,我現在是一名Android程序員,因公司業務擴展,現在有機會轉iOS,我很嚮往並且覺得自己有這個能力。我自認具備一定的自學能力(參考1:自學Andriod不到2個月後找到現在這份Android開發的工作,主要參與公司廣告平台SDK的開發和一些App。參考2:目前GitHub上有5、6個Public Repository均為自學Android時做的App。經常在StackOverflow上尋找答案或分享心得,目前有幾百積分和幾個獎章),所以不會畏懼學習新語言和新平台。但是公司能給我熟悉學習的時間可能略短。所以我想請教,一個Java熟練(工作2年,其中有近半年C#項目,同為自學),熟悉Android的傢伙,從零學起iOS到能上手大概需要多久?(請按照一天學習實踐工作16小時左右估算)謝謝。


之前一直搞 iOS,最近兩周開始研究一些 Android,雖然高中的時候學過一些,但是上大學以後搞 iOS 都快把 Android 忘光了。但在這還不到兩個周時間內我除了拾起之前的知識(四大組件、高級視圖等最基本的東西),還分析了大量的源碼,包括 Framework 和一些開源第三方庫(OkHttp、RxJava 2 等),期間也給知乎提交了 PR,這麼短的時間肯定不能學得很系統,所以我的方法就是從一個點切入,像掃雷一樣把相關的知識也挖開。比如從 startActivity,可以牽扯到 Instruments、ActivityManagerService、ActivityThread、Binder、PhoneWindow、ViewRootImpl、ContextImpl 等等,通過分析源碼能很容易搞明白一個 Activity 的啟動過程到底是怎樣的,其實一點也不神秘。

以上就是我這近兩周時間的收穫,之後我可能會做寫個 app 來練練手。

Android 向 iOS 轉移其實還是比較輕鬆的,除了語言需要學習之外(Java 之前就會了,兩周學語言不可能,但是初學的話不用很深入)最重要的就是系統框架和 API 的學習,iOS 與 Android 的開發邏輯還是相差很大的,比如 Android 開啟 Activity 是要走一遍 IPC 的,iOS 顯示一個新 VC 卻不用,因為 iOS 應用都是一個進程內的事情,系統為你分配了一塊地方,你可以在裡面顯示東西,但怎麼顯示是你的事情,Android 是你向系統要一塊空間,頁面跳轉也需要系統來幫忙協調窗口的切換。所以都叫 Window,但作用截然不同,這是初學者容易混淆的。

其次就是設計模式上的區別,這個區別也是相當大的,iOS 有個比較蛋疼的模式就是 Target-Action,還有一個是 Delegate,這兩個模式有對應的 block 解決方案,涉及 runtime 的知識,題主之後也需要去了解。

然後就是 iOS 限制很多,Android 很多功能在 iOS 上肯定是實現不了的,但是 iOS 實現複雜界面貌似容易(歸根到底還是 iOS 的布局邏輯簡單)。

其實總體來講是不難,只有你 Android 學得好,上手另一個也很快。以前用 React,但是厭倦了函數式的風格,學了 Angular 4,不到一個周就搞明白基本的概念了,如果不上課的話應該更快。所以說初學上手都是很容易的。

最後分享一下我學習新技能的方法:

實踐 &> 官方文檔 &> 分析源碼 &> StackOverflow &> Google &>&> 百度……


你應該問你的公司給你多少時間?

我有點好奇,為什麼一定要轉型?是因為你覺得 iOS 開發比 Android 開發更「高級」么?要不來丁香園吧,我們還很缺 Android 工程師呢。我又忍不住想招人了. :)


當初我花了大概五六天左右的業餘時間時間自學。

從買了mbp到手開始算起。練手,熟悉mac環境,以前沒用過mac,大概花了三四個晚上。

然後花了四個工作日把自己做的一個象棋遊戲改造成iOS版;然後花了兩個工作日改造成圍棋。

在此之前,我已經有一個月的android開發經驗了。


iOS建議你分成兩部分看,

  • 第一部分是C/Objective-C的學習, 這部分的耗時取決於你的技術積累, 因為它涉及了很多C語言的基礎知識, 包括指針, 函數指針等, 這都是Java裡面沒有的概念, Objective-C看上去比較怪異, 但是如果你認真看一遍, 你會發現它很多地方比JAVA要好. 當然內存管理會比較頭疼. 雖然有了ARC, 但是關於內存基礎知識你必須要掌握好. 這部分的要花多少時間很難說, 很多地方你可以跳過就能寫iOS程序, 但是遲早你會需要回來補課.

  • 第二部分是iOS開發框架, Xcode使用的學習, , 1-2個月應該能上手, 但是學會了還不等於在使用中一氣呵成. 這就是純經驗的積累了, 找個師傅, 帶著多做幾個項目就好了.


比較贊同何一舟的.另外補充點:

1.建議看一下官方的Cocoa Fundamentals Guide.尤其是Cocoa Design Patterns那一節,一開始不明白沒有關係,等你框架用熟了就會慢慢有體會了。

2.讀代碼一開始可以看蘋果各種官方樣常式序,每一個都不大。

3.最好先搞清楚Callback,進而理解什麼是Delegate.Delegation是整個ios開發框架的核心.這個是知乎上有關delegate的問題:http://www.zhihu.com/question/19827157

4.看框架中的類介面設計,比如UITableView。思考它為什麼會這麼定義。

5.有興趣看框架內部實現的話,你可以去看開源的cocotron.


以我的經驗,要是Android學的不錯,1個月足矣。

無非是學下Objective-C那奇怪的語法,Foundation框架都可以在Java上找到影子,差不多。Cocotouch的大部分空間也是一樣,Android SDK 里都有差不多的。


看到這個我就瞎扯2句,怎麼說呢,我也是安卓轉過來的。

從安卓轉過來最不熟悉的就是語言和寫法了 尤其是object-c:以下簡稱OC ,

oc中出現的最多的就是[ ] 就是這個傢伙 以及 self + — 等等傢伙。

所以你首先得花些時間 熟悉下OC的語法,熟悉它是怎麼用的

看完語法以後 就開始看框架和視頻 網易公開課斯坦福大學公開課:iOS 7應用開發,有翻譯和字幕。

於此同時可以試著找一些demo過來看看以及寫寫,主要是習慣用oc的寫法,也就是【】,self,等等

其實安卓和iphone開發的思維是一樣的 只不過語言不一樣

你可以把你以前寫過的簡單的安卓demo改寫成ios。

把安卓的list改成 ios的數組

把安卓的列表 換成ios的tableview 把適配器 換成ios的cell

等你慢慢都替換掉了 你也基本上入門了

寫界面是學的最快的 因為界面涉及的東西和用法最多。

還有ios中很多基本類型都是NS開頭的 java的string 在oc裡面是NSstring

array 在oc裡面是NSarray

ios最重要的還是要掌握代理的用法 這個非常重要

還有一個是ios的動畫這個也非常重要 因為安卓一向動畫不如ios 所以這2塊的區別非常大

其他的比如滾動視圖什麼的其實差不多 相應替換就可以了,還有ios是沒有Gridview的 這個是要用其他方法實現的



樓主的提問非常好,兩者本身是有一些相似點的。這裡推薦一篇專門針對安卓開發轉型iOS開發的內容乾貨,希望能夠幫到樓主。

傳送門:【騰訊WeTest乾貨分享】Android碼農如何一星期「轉職」iOS開發 - 知乎專欄


按照樓主的條件我覺得可能這樣更快一點:

1. 項目組有個比較熟練的工程師帶你,並不是說什麼都教你的那種,是要在你遇到困難的時候能夠給你建議,幫助儘快解決問題;

2. 以項目驅動,以用帶學。這樣既有目的性也會帶來一定成就感,提高學習新東西的自信心。因為學習自信心和成就感是很重要的;

3. 多看別的iOS的源代碼,學習新東西就是要不斷的 學習-》消化-》學習-》消化。


和樓主差不多,之前是做了個Android的版本.然後公司要ios版本的,從mac買來到APP上架,耗時2個月.稍微看點基礎就直接上了,只不過單打獨鬥真的蠻辛苦的...


如果是上手,我個人覺得1-2個月就差不多了,但學無止境,如果你想創造一個好的產品,一個好的應用,則需要花很長的時間,每一次iOS SDK更新都會帶來新的東西,夠你學習一陣子的.

在初學階段,借鑒和模仿是最為重要的,拋棄以前所學的東西,打破成見,學習的效果才會更明顯.


為啥android要轉iOS


我要開始學iOS了,因為缺錢,iOS可以接到外包。不知道多久可以上手啊


關鍵問題是,得弄個開發環境,這個成本就不小


我現在從事安卓開發,但覺得現在設備已經齊全(公司配了pro以及有公共測試的phone6),所以想閑余時間學習一下IOS。

已經利用工作之餘時間學了1周,希望對題主有用。

1.找一本入門級別的書籍學習oc,如果你有c語言基礎並且對於指針相當熟悉,那你看完oc的語法部分估計不超過3天。

2.像學習android一樣先做一點普通的UIView。

3.複雜布局開始。

推薦入門書籍《瘋狂IOS講義》,買上冊就行了。

希望能和廣大Andorid程序員一同分一點IOS的羹。

題主切記,精通一項,熟悉另一項才是最關鍵的,等這個時候,月薪25k-35k應該配得上你了。


推薦閱讀:

如何評價周星馳電影轉型的嘗試?
電視劇演員轉型做電影演員遇到的「電視味」指的是什麼?

TAG:程序員 | iOS開發 | iOS工程師 | 轉型 | iOSvsAndroid |