一、main()c++
{ int a[5]={1,2,3,4,5};git
int *ptr=(int*)(&a+1);程序員
printf("%d,%d",*(a+1),*(ptr-1));編程
}json
第一個:2,a指向數組首地址a[1]=2;swift
第二個:a是一個數組名,也就是數組的首地址。設計模式
對a進行取地址運算符,獲得的是一個指向數組的指針!!!!這句話尤其重要!也就至關於數組
int (*p) [5] = &a;p是一個指針,它指向的是一個包含5個int元素的數組!!安全
那麼執行p+1後,p的偏移量至關於 p + sizeof(int) * 5,而程序中強制將指針p轉換成一個int* 那麼 p -1 其實就是 p - sizeof(int)因此,p -1 指向了數組中得最後一個元素,也就是 5服務器
二、oc沒有多重繼承,是用協議(protocol)來代替
三、oc類裏面的方法只有兩種,靜態方法和實例方法,全部實例變量都是默認私有的,全部實例方法默認都是共有的。
四、const意味着「只讀」,const int a;int const a;聲明只讀的整型變量a,
const int *a;a是一個指向長整型數的指針,整型數不可修改,但指針能夠修改
int* const a;a是一個指向整型數的長指針,整型數可修改,但指針不可修改
int const* a const;a是一個指向長整型數的長指針,都不可修改
阻止變量被修改,使用const關鍵字
對指針來講,能夠指定指針自己爲const,也可指定指針所指的數據爲const,或兩者同時爲const
在一個函數聲明中,const能夠修飾形參,代表它是一個輸入參數,在函數內部不能改變其值
對於類的成員函數,若指定其爲const類型,則代表其是一個常函數,不能修改類的成員變量
五、static的做用
函數體內static變量的 做用範圍是該函數體,不一樣於auto變量,該變量的內存只被分配一次,所以其值在下次調用時仍維持上次的值。
在模塊內的static全局變量能夠被模塊內全部函數訪問,但不能被模塊外的其餘函數訪問。
在模塊內的static函數只可被這一模塊的其餘函數調用,這個函數的使用範圍被限制在聲明它的模塊內。
在類中的static成員變量屬於整個類所擁有,對類的全部對象只有一份拷貝
在類中的static成員函數屬於整個類所擁有,這個函數不接收this指針,所以只能訪問類的static成員變量
六、extern"C"的做用
被它限定的函數或變量是extern類型的
被它修飾的變量和函數是按照c語言方式編譯和鏈接的
七、#import,#include的區別,@class呢?
@class通常用於頭文件中須要聲明該類的某個實例變量的時候用到,在m文件中仍是須要使用#import,#import比#include的好處是不會引發交叉編譯
八、oc的優勢 cateogies, Posing, 動態識別,指標計算,彈性訊息快遞、不是過分複雜的c衍生語言,可與c++混合編程
九、命名空間:不支援命名空間,不支持運算符重載,不支持多重繼承,使用動態運行時的類型,都是函數調用,不少編譯時的優化方法用不到
十、內存管理
十一、自動釋放池
十二、堆和棧
對於棧來說,是由編譯器自動管理,對於堆來講,釋放工做由程序員控制,容易產生內存泄漏
棧在widows系統下,是向低地址擴展的數據結構,是一塊連續的內存區域,能從棧得到的空間較小
堆:堆事向高地址擴展的數據結構,是不連續的內存區域,得到空間比較靈活,也比較大。
區別:碎片問題:對於堆來說,頻繁的new/delete會形成內存空間的不連續,從而形成大量碎片,使程序效率下降。對於棧來說,由於棧是先進後出的隊列,以致於永遠不可能有一個內存塊從棧中間彈出
分配方式:堆是動態分配的,棧有兩種分配方式:靜態分配和動態分配
分配效率:棧是機器系統提供的數據結構,計算機底層對棧提供支持,堆是c/c++函數庫提供的,它的機制是很複雜的
十二、swift新特性
支持全部c和oc的基本類型
提供了兩種功能強勁的集合類型-Array和Dictionary
支持一種新的高級類型-元組
可選類型
支持閉包的特性
支持腳本語言的特性,能高效地編譯運行
中級:
一、mvc
二、線程和進程
二者關係:
一個線程只屬於一個進程,而一個進程能夠有多個線程,但至少有一個線程
資源分配給進程,同一進程的全部線程共享該進程的全部資源
線程在執行過程當中,須要協做同步。不一樣進程的線程之間利用消息通訊的辦法實現同步
真正在處理機上運行的是線程
線程是指進程內的一個可執行單元,也是進程內的可調度實體
二者區別:
調度:線程做爲調度和分配的基本單元,進程做爲擁有資源的基本單位
併發性:不只進程之間能夠併發執行,同一個進程的多個線程之間也能夠併發執行
擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但能夠訪問隸屬進程的資源
系統開銷:建立、撤銷進程的開銷比較大
三、進程的同步機制
原子操做、信號量機制、自旋鎖、分佈式系統等
四、進程死鎖的緣由
資源競爭以及進程推動順序非法
五、死鎖的4個必要條件
互斥、請求保持、不可剝奪、環路
六、死鎖處理
鴕鳥策略、預防策略、檢測與解除死鎖
七、KVC和KVO
KVC:鍵值編碼,是一種間接訪問對象實例變量的機制,該機制能夠不經過存取方法就能夠訪問對象的實例變量
KVO: 鍵值監聽,是一種使得對象獲取其餘對象屬性變化的機制
實現KVO模式,被觀察的對象必須使用KVC鍵值編碼來修改它的實例變量,這樣才能被監聽
八、深複製、淺複製
深複製:不只複製對象自己,對象持有的屬性對象也作複製
淺複製:只複製對象自己,不對裏面的屬性複製
九、assign、retain、copy、nonatomic
assign:普通賦值,通常用於基本數據類型,常見委託設計模式,以防止循環引用
retain:保留計數,得到對象的全部權,引用計數在原有基礎上加1
copy:通常字符串使用copy。Foundation中的不可變對象使用copy效果至關於retain,只是引用計數+1
nonatomic:非原子性訪問,不加同步,多線程併發訪問會提升性能
十、ARC狀況下,strong與weak,_unsafe _unretained與weak的區別
strong:強引用,weak:弱引用,在ARC中,使用strong告訴編譯器自動插入retain,weak至關於手動管理內存的assign
_unsafe _unretained與weak功能一致,區別在於當指向的對象銷燬後,weak會將變量置爲nil,防止調用野指針
十一、ARC存在內存泄漏嗎?
循環引用致使內存泄漏,oc對象與CoreFoundation類之間橋接時,管理不當也會產生內存泄漏
十二、事件響應者鏈
響應者鏈表示一系列的響應者對象。事件被交由第一響應者對象處理,若是第一響應者不處理,事件被沿着響應者鏈向上傳遞,交給下一個響應者(next responder)
view->viewcontroller->window->application->丟棄事件
1三、svn、git使用
1四、打包靜態庫
1五、App發佈上架流程
1六、storyboard的使用
高級:
一、CALayer與UIView的區別?
二者的最大區別就是,圖層(CALayer)不會直接渲染到屏幕上。uiview是iOS系統中界面元素的基礎,全部的界面元素都繼承自它。它自己是由CoreAnimation來實現的。真正的繪圖部分由一個CALayer類來管理。一個uiview上能夠有n個CALayer,每一個layer顯示一種東西,加強uiview的展示能力
二、GCD
GCD是apple開發的一個多核編程的較新的解決辦法
是一個替代諸如NSThread等技術的很高效和強大的技術,徹底能夠處理如數據鎖定、資源泄漏等複雜的一步編程問題
擴展知識:(操做隊列、異步,同步)
三、TCP和UDP
TCP:傳輸控制協議,提供面向鏈接的、可靠的、點對點的通訊
UDP:用戶數據報協議,提供非鏈接的,不可靠的點到多點的通訊
四、socket鏈接和http鏈接
http:短鏈接,客戶端項服務端發送一次請求,服務端響應鏈接即會斷掉
socket:長鏈接,一旦創建不會主動斷掉
五、TCP的三次握手
第一次:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等服務器確認
第二次:服務器端收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN(syn=k)即SYN+ACK包,此時服務器進入SYN_RECV狀態
第三次:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務端進入ESTABLISHED,完成三次握手
六、iOS對象通訊方式
代理、block、通知、KVO
七、http,https
短鏈接,都是客戶端主動發送請求,服務器做出響應,而後斷開。GET沒有請求體,POST有請求體
https:安全超文本傳輸協議。使用安全套接字層(SSL)進行信息交換
八、xml與json數據解析
XML解析方式:DOM解析和SAX解析
DOM解析必須先完成DOM樹的構造,在處理規模較大的XML文檔時很耗內存,佔用資源比較多
SAX是用事件驅動模型,解析XML文檔時每遇到一個開始或者結束標籤、屬性或者一條指令,程序就產生一個事件來進行相應的處理。SAX更適合較大的文檔
json解析比較好用的是第三方的JSONKIT和iOS自帶的json解析類
九、taleview的複用,設計模式
十、core Data
十一、斷點續傳
十二、Core開頭的系列內容,CoreAnimation和CoreGraphics,分別使用CA和CG作過什麼動畫或者圖像上的內容