iOS開發(fā) A到Z

[TOC]

iOS開發(fā)現(xiàn)狀

目前我們在看到一個JD的時候,iOS開發(fā)一般會特指iOS互聯(lián)網(wǎng)App開發(fā),主要關(guān)注與用戶體驗和互聯(lián)網(wǎng)交互。

這樣看起來,主要有兩條線,其一是互聯(lián)網(wǎng),其二是用戶體驗,所有的技能基本上都是從這兩個點出發(fā)的。

我們來假定一個場景:

老板:我們需要開發(fā)活動,元旦前要上線

iOS:后臺API是什么

后臺:API定義好了,還沒有數(shù)據(jù),需要爬一些數(shù)據(jù)

iOS:產(chǎn)品稿定義好了嗎

PM:產(chǎn)品稿已經(jīng)好了

iOS:設(shè)計和交互都有了嗎

交互:沒問題,已經(jīng)確定好了

設(shè)計:已經(jīng)設(shè)計完了,還差切圖就好了

iOS開始評估這個需求,然后對這個需求提出了幾個問題

  • 這個交互動畫比較難搞,如果這么設(shè)計的話,元旦前做不好

  • 這個頁面是純展示的頁面,能不能讓前端做

  • 這個需求哪些地方需要埋點做數(shù)據(jù)分析,要盡快整理出來

  • 這個頁面彈窗不太符合蘋果的設(shè)計規(guī)范

  • API什么時候有數(shù)據(jù)可以調(diào)試

  • QA可以開始準(zhǔn)備用例了

這是一個典型的開發(fā)場景,對于大部分的iOS開發(fā)來講是一個不斷重復(fù)的過程,這里我們可以清楚的看到合作的不同角色以及iOS開發(fā)在其中的定位。

iOS開發(fā) - 入門

iOS的入門是非常容易的,有一臺mac基本上就可以了,買幾本教程或者看看視頻,很快就能入門。

為了衡量自己的水平,那么開始做自己的第一個App吧

這個時期對app開發(fā)的認(rèn)知基本上就是頁面,一個個的頁面,不管你有多少需求,我自然可以開發(fā)出對應(yīng)的頁面,可以叫做頁面開發(fā)工程師??梢哉f沒有搞不定的需求,只有不合理的需求。

語言

語言是必備的工具,主要是Objective-C,這個階段掌握OC的基本語法和應(yīng)用,以及基礎(chǔ)的OOP

系統(tǒng)

使用系統(tǒng)提供的各種framework

  • push

  • 定位

  • 相冊

  • 。。。

交互相關(guān)

頁面基本上是交互的基本組成了,不同頁面之間的跳轉(zhuǎn)構(gòu)成了app的使用路徑。這個里面主要包含的技能有:

  • uikit

    • 基本控件

    • tableview

    • 布局

    • 導(dǎo)航

  • 簡單動畫

    • uiview animation

互聯(lián)網(wǎng)相關(guān)

大部分公司的API都是通過http來調(diào)用的,所以這個階段只需要會調(diào)用http的相關(guān)庫就可以了

  • http

數(shù)據(jù)

因為http下載到數(shù)據(jù)基本上都會是json格式的

  • json到模型

工程

這個階段基本不關(guān)注工程,只要會用git的基礎(chǔ)操作即可

掌握了這些技能基本上就可以開發(fā)簡單的應(yīng)用了,需要一些高級的功能,都可以通過第三方庫來實現(xiàn),所以這個階段會說自己熟練使用和掌握各種第三方庫,無非是用pod把第三方庫引入進(jìn)來使用罷了。

寫代碼速度也非常快,自動布局,模型轉(zhuǎn)換,網(wǎng)絡(luò)下載都得心應(yīng)手,偶爾也會引入一些MVVM等架構(gòu)的概念。

iOS開發(fā) - 晉升之路(Dive Into)

知其然而知其所以然

開發(fā)入門之后慢慢會覺得有一種全面掌控的感覺,在慢慢遇到挫折之后會靜下來思考人生。

之后會開始對之前用的東西產(chǎn)生懷疑,然后自己考慮實現(xiàn)一些第三方庫或探索第三方庫的源碼,從優(yōu)秀的代碼中學(xué)習(xí);

場景設(shè)計:PM拿著手機來找程序

PM:你看脈脈這里有一個動畫,我們要做一個一樣的

iOS:這個效果不錯啊,好酷

。。。兩分鐘

PM:我們做這個效果要多久

iOS:我先研究一下~~

這個時候會掃描自己的技能列表,發(fā)現(xiàn)居然不能完成這個動畫,怎么辦?

程序員的好朋友google,stackoverflow,github能夠給出大部分的答案

PM:我們的程序為啥比別人慢

PM:我們的安裝包為啥比別人的大那么多

PM:有用戶反映我們的app用起來發(fā)熱

PM:有用戶反映我們的app偷跑流量

PM:老板說要改一個文案,線上的可以改嗎

PM:我們的app要根據(jù)手機殼更換主題顏色

PM:~~~

面對PM各種別出心裁的需求,入門級選手很快就慌了,還是多請教請教老司機,畢竟老司機開過的車比較多

在比較好的公司里面,技術(shù)傳承是非常重要的,每個新人有一個mentor是非常重要的。

基本上在這些公司呆上兩三年多,就能可以解決以上大部分多問題了。

語言

除了Objective-C之外還可能掌握Swift,Swift不是必須的。

  • OC Runtime,最著名的奇技淫巧如swizzle這些

  • OOP設(shè)計模式和設(shè)計原則SOLID

  • FRP,主要是RAC的應(yīng)用

  • MVVM / MVP 等頁面架構(gòu)

Cocoa

對iOS系統(tǒng)程序的運行原理有更深的理解,能夠解決一些比較詭異的bug

  • runloop

  • autorelease pool

  • 內(nèi)存管理

  • 多線程和異步開發(fā)

交互相關(guān)

除了布局之外,還對手勢,事件響應(yīng)過程,動畫有更深入的了解

  • UIKit

    • layer

    • collectionview

    • 頁面的繪制和更新過程

    • 頁面的渲染優(yōu)化

    • 自定義手勢

  • 動畫

    • 頁面transition動畫

    • CA動畫

    • displayLink動畫

    • 其他

互聯(lián)網(wǎng)相關(guān)

對于更多的網(wǎng)絡(luò)傳輸,緩存,加速等有一定的了解

  • 區(qū)分url和uri

    • 對url encode有深刻的了解
  • http/https

    • Http2/http3(QUIC)
  • 長鏈接

    • 自研

    • websocket

    • 等等

  • DNS優(yōu)化

數(shù)據(jù)

除了json可能還會有各種二進(jìn)制數(shù)據(jù)如protobuf等,但是更主要的還是下面這些的應(yīng)用和處理

  • 緩存

  • 數(shù)據(jù)庫

  • 數(shù)據(jù)一致性

調(diào)試

  • lldb

    • 各種斷點技巧
  • instrument

工程

進(jìn)階路上肯定會對工程有一定對研究和使用,主要來講就是

  • CI的使用和配置

  • 工程的管理

    • pod

    • carthage

    • submoudle

  • 編譯過程和加速

  • 單元測試和代碼覆蓋

  • Appstore

經(jīng)過上面的大部分問題的洗禮,基本上就可以帶人帶小團隊了,這個過程因人而異,可能是二三年,也可能是四五年,對于各種技術(shù)的選型和分析基本上都是沒問題的

iOS開發(fā) - 更高發(fā)展 (break out)

上面一個階段之后一般也會有一段時間的迷茫期,很容易受網(wǎng)上的一些文章的影響,比如說iOS開發(fā)沒有前途,移動開發(fā)要被取代等等,會對自身的價值和未來的發(fā)展產(chǎn)生一些疑問,這個時候就要跳出來,打破iOS開發(fā)字面的約束,才能有更高的發(fā)展。

一般情況下會在靠近的領(lǐng)域,比如大前端,比如全棧進(jìn)行一些適量的探索。

iOS和前端

Hybrid模式是一個非常常見的模式,iOS和Android對webview進(jìn)行擴充使網(wǎng)頁可以通過js調(diào)用系統(tǒng)的能力,從而給前端開發(fā)帶來更多的可能,實現(xiàn)一種快速開發(fā),跨端的開發(fā)模式。這種情況下需要開發(fā)人員對webview有較深入的了解,對js有較好的理解。深入的話可以去了解node以及相對應(yīng)的開發(fā)框架,嘗試自己搭建簡單的前端頁面和服務(wù)。

iOS和服務(wù)器

iOS和服務(wù)器之間主要就是數(shù)據(jù)交互了,彼此之間相互了解可以解決一些問題,比如減少請求次數(shù)和流量,嘗試使用非http的服務(wù)

跨平臺的攪局者

Hybrid方案有天然的優(yōu)勢和劣勢,主要劣勢還是webview本身的渲染和交互會比較慢,讓交互效果打折扣,所以就有了各種框架來提供,原生應(yīng)用的運行效率,H5的開發(fā)效率,實現(xiàn)雙贏,最出名的就是RN了,其次是Weex以及最近火爆的Flutter。

除了框架外,還有語言的侵入,原生iOS應(yīng)用一般都是OC或Swift來開發(fā),不過也有一些其他語言希望加入進(jìn)來,早期有微軟的c#,現(xiàn)在有Jetbrain的kotlin,以及一直期望進(jìn)入的各種js衍生品,一些大牌的公司還會使用C++來開發(fā)一些核心邏輯。

開發(fā)思維的轉(zhuǎn)變

從設(shè)計模式上來看有很多優(yōu)秀的范例,我們可以去使用套用這些模式來解決我們代碼中的結(jié)構(gòu)問題,另外也要從設(shè)計模式中跳出來。

OOP思想是目前的主流思想,不過近些年的開發(fā)語言或多或少都會提到一些函數(shù)式開發(fā)語言的特性,不懂鞋函數(shù)式編程語言都不好出去聊天了,了解一些FP是很有必要的,還有GP,RP等等也都是非常常用的一些技能。

工程上的變化

面對工程的體量越來越大,更多的公司提出了自己的解決方案,不再是單純的pod能夠解決的,一個完整的工程編譯一次一個小時,修改一個代碼也要編譯十分鐘,這些都是很容易碰到的問題

更多

除了能夠總結(jié)的知識,還有很多領(lǐng)域的知識,比如圖像,視頻,即時通訊,仿真,模式識別等等數(shù)也數(shù)不完的

還有

和PM相愛相殺,慢慢的也明白更多產(chǎn)品的思維,能夠從更多的角度去思考問題

能夠從團隊的角度去思考,關(guān)注團隊的成長和公司的成長,培養(yǎng)更多的人才

是去做架構(gòu)還是去做管理都是見仁見智,各有發(fā)展

談?wù)勊惴ê兔嬖?/h2>

算法是不是重要,很多人都說,公司面試造核彈,入職擰螺絲,主要就是說這個了吧,很多公司都會面試算法,尤其是外企,國內(nèi)公司反而是面試項目和經(jīng)驗更多一些,外企有的會有甚至有三四輪算法面試。

對于大部分工程師來講,確實用不到更高深的算法,因為前頭我們說了,大部分都是頁面工程師,所以用不到,但是當(dāng)你要做深入了,需要考慮這個問題了。

面試的時候面試算法主要是用來評價一個人的能力和潛力,順帶考察一些溝通能力,軟素質(zhì)等等,而針對簡歷和項目以及iOS知識的面試主要是來判斷經(jīng)驗,國內(nèi)公司希望到崗后馬上進(jìn)入需求開發(fā)階段,所以對經(jīng)驗更看重一些,比如要求技術(shù)棧是一樣的才能面試。外企很多更注重能力,就算你沒做過iOS開發(fā),但是通過算法和計算機的基礎(chǔ)知識判斷你是一個能力沒問題的候選人也有很大幾率入選。同樣來講如果候選人較多的話,肯定會綜合考慮經(jīng)驗和能力。

刷題是非常常見和有效的,尤其是很多公司的算法題是有固定套路的,只要刷一些leetcode或者網(wǎng)上搜一些面試題就能準(zhǔn)備和通過,針對這種情況,需要面試官在題目上多一些變化,并在面試的時候把這些變化拿出來討論,不要只單獨的看結(jié)果,多討論過程比看最后的代碼要好。

刷iOS知識點也很常見,這個有時候不好甄別,所以建議面試的時候拿一些具體的場景來讓候選人進(jìn)行設(shè)計和實現(xiàn),了解其思路,是否可以有效識別其中蘊含的一些障礙和陷阱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,172評論 3 119
  • 2018年5月6日 星期日 陰有小雨 今天,辛辛苦苦拉扯了近十年的兒子第一次“試飛”。由于之前沒...
    棟鈺媽閱讀 150評論 0 0
  • 生命真的很很神奇 不知道這植物叫什么 冬天的時候就已經(jīng)干枯了 開學(xué)回來的時候以為已經(jīng)死了就沒有管它 后來,發(fā)現(xiàn)它竟...
    陌歸墨閱讀 183評論 0 1
  • 投射寶寶健康快樂聰明可愛吃好增長身高和體重 投射自己愛自己,愛身體,皮膚好好,身體美美,健康苗條 投射工作順利收入...
    翟美麗閱讀 139評論 0 0

友情鏈接更多精彩內(nèi)容