iOS開發知識體系
每個人心中都有一套自己的知識體系,對於iOS開發,我有自己的一套粗略的認識,望各位博友指正.
一,塊.
1.iOS系統的SDK
iOS的SDK學習可能是初學者需要耗時最多的一個知識。因為其中有大量的庫需要我們來學習掌握。其中最基本的幾個為:
Foundation.framework
在你學習使用iOS的過程中,你會碰到大量的"NS"前綴的類庫,這些類庫基本上屬於Foundation.framework,它是iOS開發的核心庫,其中包括:常用數據結構(NSArray/NSDictionary/NSString 等)、網絡(NSURL../NSHTTP..)、多線程(NSThread/NSNSOperation)等。
UIKit.framework
庫使用"UI"為前綴的類庫被包含在這個framework中,這些大部分是系統的UI層面的控件。如UIViewController、UIView、UIButton、UILabel等。使用這些控件才能構建出一個完整的APP。
QuartzCore.framework
iOS中絢麗而平滑的動畫效果,是吸引人的一大利器,如果你想做出這樣的效果,那你就得了解這個庫了。iOS的核心動畫的API都被包含在這個framework中,學會使用它才能讓你的APP更加亮眼。
AVFoundation.framework
AVkit.framework
CFNetwork.framework
Mapkit.framework
..
2.UI(NSArray/NSDictionary/NSString)
(UIViewController/UIButton/UIView)
3.網絡(NSURl/NSHTTP...)
網絡這一塊不僅僅指學會使用SDK中的網絡API調用,而是指要去理解網絡編程。
你需要知道HTTP協議消息結構
、GET/POST方法
、常見的狀態碼的意思
、Request/Response
。
你還需要知道與服務器通信使用的數據格式如:json、xml。
1、HTTP(HTTPS)、TCP、UDP協議的區別
2、同異步的GET和POST請求
3、AFNetworking封裝的網絡請求
4.數據庫
數據庫你需要知道基本的SQL語句 select/update/insert/delete的操作;
需要知道怎么連接表查詢:外連接、內連接、自連接等;
需要知道實體數據一對一、一對多、多對多關系如何設計數據庫表。
5.GitHub
iOS有着很濃厚的開源精神,在GitHub上有許多優秀的開源項目,在真正的開發過程中,某些著名的開源庫大家也都廣泛的使用着。如:
6.多線程(NSThread/NSOperotion...)
1、NSThread:優點是NSThread 比其他兩個輕量級。缺點是需要自己管理線程的生命周期,線程同步。線程同步對數據的加鎖會有一定的系統開銷。
2、NSOperaion:優點是不需要關心線程管理,數據同步的事情,可以把精力放在自己需要執行的操作上。Cocoa operation 相關的類是 NSOperation ,NSOperationQueue。NSOperation是個抽象類,使用它必須用它的子類,可以實現它或者使用它定義好的兩個子類:NSInvocationOperation 和 NSBlockOperation。創建NSOperation子類的對象,把對象添加到NSOperationQueue隊列里執行。
3、GCD:Grand Central Dispatch (GCD)是Apple開發的一個多核編程的解決方法。在iOS4.0開始之后才能使用。GCD是一個替代諸如NSThread, NSOperationQueue, NSInvocationOperation等技術的很高效和強大的技術。現在的iOS系統都升級到7了,所以不用擔心該技術不能使用。
7.第三方庫
8.第三方插件
1、代碼注釋生成器:VVDocumenter
2、CocoaPods插件,省去那些命令行了:CocoaPods for Xcode
3、imageName提示並且自動補全:KSImageNamed-Xcode
4、
9. 上線流程
1、准備好證書和素材
2、iOS上架的一般流程
10.oc
1.運行時特性
2.protocol
3.cetegory分類
4.estension擴展
類別Category和擴展Extension的區別:Category可以增加類的額外方法,一般不能增加類的屬性(在runtime下可以),而Extension可以增加額外方法和屬性,但其中的方法一定要在@implementation內實現,否則編譯報錯。
5.引用計數器
6.block
11.系統控件
1.自定義控件
2.換膚
3.多語言(國際化)
4.手勢
5.Info.plist
6.pch文件
6.XML
7.Stroyboard
12.知識點
1.分享
2.聊天(IM,即時通訊,網易雲信/融雲/環信..)
3.附近(LBS)
4.支付
5.藍牙
6.直播
7.音頻視頻
8.地圖
9.推送
1、點擊推送開發的一般流程
2、接入極光、友盟、信鴿、百度等第三方推送服務
13.設計模式
1.MVC/MVP/MVVM
MVC:即Model - View - Controller,因為大量的邏輯在controller里,顯得臃腫。
MVVM:MVC的加強版,即Model - View - View Model,Model是數據對象,View只做視 圖顯示,Controller是連接器,而View Model則是處理處理數據和視圖的邏輯,MVVM的好處是使得Controller很輕量,不臃腫。
2.工廠模式
3.單例模式
4.觀察者模式(KVO/KVC)
5.
1、創建型:單例設計模式、抽象工廠設計模式
2、結構型:MVC 模式、裝飾器模式、適配器模式、外觀模式、組合模式
3、行為型:責任鏈設計模式、觀察者設計模式,備忘錄設計模式、命令設計模式
14.三大方式
1.代理(Delegate)
2.block
3.通知
15.其他語言
1.c(基礎也是進階)
2.swift(未來趨勢)
2.HTML5
3.js
4.java
16.持久化
一,本地數據緩存
1、寫入plist文件;
2、使用系統類NSUserdefault;
3、歸檔;
4、使用系統數據庫coreData;
5、使用FMDB數據庫。
17.工具
一,使用svn、Git或者第三方項目管理工具
1、svn工具:Cornerstone.app和Versions.app,也可以使用Mac自帶的,看看教程吧
2、git工具:SourceTree
18.面試相關
1)、SDWebimage的實現原理
答案:1、先把默認圖片顯示,然后SDImageCache先從內存中查找,有就顯示,沒有就去硬盤上查找,查到就添加到內存中,並且顯示圖片,如果硬盤中也讀取不到圖片,那就會 alloc 一個SDWebimageDownloader,異步加載圖片,加載完成顯示圖片,並且保存到SDImageCache中,在內存和硬盤中同時保存。SDImageCache在初始化的時候會注冊一些通知,在內存警告或退到后台的時候清理內存圖片緩存,應用結束的時候清理過期圖片。
2)、單例的原理和實現以及用處
1、原理:在一個程序進程中只會實例化一次
2、實現(不太嚴格,因為還是可以alloc)
+ (AccountManager *)sharedManager {
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
3、用處:保證對象的唯一性,系統的UIApplication(應用程序實例)、NSNotificationCenter(消息中心)、NSFileManager(文件管理)、NSUserDefaults(應用程序設置)、NSURLCache(請求緩存)、NSHTTPCookieStorage(應用程序cookies池),單例可以優化本地緩存等
3)、@synthesize和@dynamic分別有什么作用?
1、@property有兩個對應的詞,一個是@synthesize,一個是@dynamic。如果@synthesize和@dynamic都沒寫,那么默認的就是@syntheszie var = _var
2、@synthesize的語義是如果你沒有手動實現setter方法和getter方法,那么編譯器會自動為你加上這兩個方法
3、@dynamic告訴編譯器,屬性的setter與getter方法由用戶自己實現,不自動生成
4)、runTime和runLoop
1、runTime:運行時,就是系統在運行的時候的一些機制,其中最主要的是消息機制。比如id類型、kvc已經selector方法的實現,在編譯的時候並不會決定真正調用核心,只有在運行時才決定。原理是用isa指針記錄執行。
2、runLoop:運行循環,是事件接受和分發機制的一個實現,是異步的,不能同步。目的是保證程序執行的線程不會被系統終止。當需要和線程進行交互的時候才會使用runLoop,線程和runLoop是一一對應的,以key-value形式保存,runLoop的創建不是線程創建的時候,而是第一次獲取的時候,銷毀則是線程結束的,當沒有事件發生的時候,runLoop會休眠,需要則再次被喚醒。
5)、進程和線程
1、進程:進程是指在系統中正在運行的一個應用程序,進程之間或不干擾,享有資源調配
2、線程:線程是進程的基本執行單元,一個進程(程序)的所有任務都在線程中執行。
19.文件夾操作File Manager