【面試題】iOS開發知識體系


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上有許多優秀的開源項目,在真正的開發過程中,某些著名的開源庫大家也都廣泛的使用着。如:

AFNetworking

SDWebImage

MJRefresh

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.第三方庫

 

AFNetworking

 

SDWebImage

 

MJRefresh

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM