1.簡述你對UIView、UIWindow和CALayer的理解json
UIView:屬於UIkit.framework框架,負責渲染矩形區域的內容,爲矩形區域添加動畫,響應區域的觸摸事數組
件,佈局和管理一個或多個子視圖 app
UIWindow:屬於UIKit.framework框架,是一種特殊的UIView,一般在一個程序中只會有一個UIWindow,但能夠手動建立多個UIWindow,同時加到程序裏面。UIWindow在程序中主要起到三個做用:框架
1、做爲容器,包含app所要顯示的全部視圖2、傳遞觸摸消息到程序中view和其餘對象3、與ide
UIViewController協同工做,方便完成設備方向旋轉的支持函數
CAlayer:屬於QuartzCore.framework,是用來繪製內容的,對內容進行動畫處理依賴與UIView來進行顯示,不能處 理用戶事件。UIView和CALayer是相互依賴的,UIView依賴CALayer提供內容,CALayer依賴UIView一共容器顯示 繪製內容。佈局
UIViewController:管理視圖的幾成熟,每一個視圖控制器都有一個自帶的視圖,而且負責這個視圖相關的一切事務。方便 管理視圖中的子視圖,負責model與view的通訊;檢測設備旋轉以及內存警告;是全部視圖控制類的積累,定義了控制器 的基本功能性能
2. 寫一個完整的代理,包括聲明,實現動畫
(略)編碼
3.分析json、xml的區別?json、xml解析方式的底層是如何處理的?
簡言之:
json數據小,易解析,不復雜 xml數據較大,比較複雜
json中以key/value形式保存,大多數是字典數組模式
xml中則是<> 節點
詳細來講:
(1)可讀性方面:基本相同,xml的可讀性比較好
(2)可擴展性方面:都具備很好的擴展性
(3)編碼難度方面:相對而言:JSON的編碼比較容易
(4)解碼難度:json的解碼難度基本爲零,xml須要考慮子節點和父節點
(5)數據體積方面:json相對於xml來說,數據體積小,傳遞的速度跟快些
(6)數據交互方面:json與JavaScript的交互更加方面,更容易解析處理,更好的數據交互
(7)數據描述方面:xml對數據描述性比較好(8)傳輸速度方面:json的速度遠遠快於xml
JSON底層原理:遍歷字符串中的字符,最終根據格式規定的特殊字符,好比{}號,[]號, : 號 等進行區分,{}號是一個字典 的開始,[]號是一個數組的開始, : 號是字典的鍵和值的分水嶺,最終乃是將json數據轉化爲字典,字典中值多是字典,數 組,或字符串而已。
XML底層原理: XML解析經常使用的解析方法有兩種:DOM解析和SAX解析。
DOM 採用創建樹形結構的方式訪問 XML 文檔,而 SAX 採用的事件模型。
DOM 解析把 XML 文檔轉化爲一個包含其內容的樹,並能夠對樹進行遍歷。使用 DOM 解析器的時候需 要處理整個 XML 文檔,因此對性能和內存的要求比較高。
SAX在解析 XML 文檔的時候能夠觸發一系列的事件,當發現給定的tag 的時候,它能夠激活一個回調方法,告訴該方法制定的標籤已經找到。SAX 對內存的要求一般會比較低,由於它讓開發人員本身來決 定所要處理的tag。特別是當開發人員只須要處理文檔中所包含的部分數據時,SAX 這種擴展能力獲得了更好的體現。
4. ViewController 的 didReceiveMemoryWarning 是在何時被調用的?默認的操做是什麼?
1)當應用程序的內存使用接近系統的最大內存使用時,應用會向系統發送內存警告,程序收到內存警告時候ViewController會調用didReceiveMemoryWarning這個方法。
2)調用了這個方法以後,對view進行釋放而且調用viewDidUnload方法
3)從iOS3.0開始,不須要重載這個函數,把釋放內存的代碼放到viewDidUnload中去。
5.面向對象的三大特徵,並做簡單的介紹
封裝、繼承、多態
封裝:將一個實例的全部屬性封裝到某個類中
繼承:子類繼承父類全部方法和屬性
多態:父類指針指向子類對象
6. 簡述NotificationCenter、KVC、KVO、Delegate?並說明它們之間的區別?
NotificationCenter:任何對象能夠發送通知到中心,同時任何對象能夠監聽中心的通知。
優勢: 通知的發送者和接受者都不須要知道對方。能夠指定接收通知的具體方法。通知名能夠是任何字符串。
缺點: 較鍵值觀察須要多點代碼。在刪掉前必須移除監聽者。不能傳大量數值,只能讓誰去作什麼事。
KVC,便是指 NSKeyValueCoding,鍵值編碼。提供一種機制來間接訪問對象的屬性。而不是經過調用Setter、Getter方法訪問
KVO的是KeyValue Observe的縮寫,鍵值觀察。這是一個典型的觀察者模式,觀察者在鍵值改變時會獲得通知。
Delegate:多用於兩個類之間的傳值,效率比NSNotification高
7.懶加載
又稱延遲加載,按需加載。
只在用到的時候纔去初始化
8. 什麼是Protocol?什麼是代理?寫一個委託的interface?委託的property聲明用什麼屬性?爲何?
協議,用來在兩個ViewController交互時所定的協議。
代理,第三方中介
weak 或者 assign ,防止循環引用
9.分別描述類目(categories)和延展(extensions)是什麼?以及二者的區別?繼承和類目的實現中有何區別?爲何Category只能爲對象添加方法,卻不能添加成員變量?
類目:主要做是爲沒有源代碼的類添加法 。經過Category添加的法會成爲原類的部分。從達到擴展個類的功能。
延展:主要做是給某類添加私有方法或是私有變量,延展能夠認爲是一個私有的類目。
兩個的區別:延展能夠添加屬性而且它添加的方法是必需要實現的。
繼承和類別在實現中的區別:類別能夠在不獲悉,不改變原來代碼的狀況下往裏面添加新的方法,只能添加,不能刪除修改。而且若是類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,由於類別具備更高的優先級。
Category只能爲對象添加方法,卻不能添加成員變量的緣由:若是能夠添加成員變量,添加的成員變量沒有辦法初始化----這是語言規則