iOS面試題四

1.簡述你對UIViewUIWindowCALayer的理解


UIView:屬於UIkit.framework框架,負責渲染矩形區域的內容,爲矩形區域添加動畫,響應區域的觸摸事

,佈局和管理一個或多個子視圖 

UIWindow:屬於UIKit.framework框架,是一種特殊的UIView,通常在一個程序中只會有一個UIWindow,但可以手動創建多個UIWindow,同時加到程序裏面。UIWindow在程序中主要起到三個作用:

1、作爲容器,包含app所要顯示的所有視圖2、傳遞觸摸消息到程序中view和其他對象3、與

UIViewController協同工作,方便完成設備方向旋轉的支持

CAlayer:屬於QuartzCore.framework,是用來繪製內容的,對內容進行動畫處理依賴與UIView來進行顯示,不能處 理用戶事件。UIViewCALayer是相互依賴的,UIView依賴CALayer提供內容,CALayer依賴UIView一共容器顯示 繪製內容。

UIViewController:管理視圖的幾成熟,每個視圖控制器都有一個自帶的視圖,並且負責這個視圖相關的一切事務。方便 管理視圖中的子視圖,負責modelview的通信;檢測設備旋轉以及內存警告;是所有視圖控制類的積累,定義了控制器 的基本功能


2. 寫一個完整的代理,包括聲明,實現

(略)


3.分析jsonxml的區別?jsonxml解析方式的底層是如何處理的?


簡言之:

json數據小,易解析,不復雜    xml數據較大,比較複雜

json中以key/value形式保存,大多數是字典數組模式

xml中則是<> 節點


詳細來說:

(1)可讀性方面:基本相同,xml的可讀性比較好

(2)可擴展性方面:都具有很好的擴展性

(3)編碼難度方面:相對而:JSON的編碼比較容易

(4)解碼難度:json的解碼難度基本爲零,xml需要考慮子節點和父節點 

(5)數據體積方面:json相對於xml來講,數據體積小,傳遞的速度跟快些 

(6)數據交互方面:jsonJavaScript的交互更加方面,更容易解析處理,更好的數據交互 

(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. 簡述NotificationCenterKVCKVODelegate?並說明它們之間的區別?


NotificationCenter:任何對象可以發送通知到中心,同時任何對象可以監聽中心的通知。

優點: 通知的發送者和接受者都不需要知道對方。可以指定接收通知的具體方法。通知名可以是任何字符串。

缺點: 較鍵值觀察需要多點代碼。在刪掉前必須移除監聽者。不能傳大量數值,只能讓誰去做什麼事。


KVC,即是指 NSKeyValueCoding,鍵值編碼。提供一種機制來間接訪問對象的屬性。而不是通過調用SetterGetter方法訪問


KVO的是KeyValue Observe的縮寫,鍵值觀察。這是一個典型的觀察者模式,觀察者在鍵值改變時會得到通知。


Delegate:多用於兩個類之間的傳值,效率NSNotification


7.懶加載

又稱延遲加載,按需加載。

只在用到的時候纔去初始化


8. 什麼是Protocol?什麼是代理?寫一個委託的interface?委託的property聲明用什麼屬性?爲什麼?


協議,用來在兩個ViewController交互時所定的協議。

代理,第三方中介

weak 或者 assign ,防止循環引用


9.分別描述類目(categories)和延展(extensions)是什麼?以及兩者的區別?繼承和類目的實現中有何區別?爲什麼Category只能爲對象添加方法,卻不能添加成員變量?


類目:主要作是爲沒有源代碼的類添加 。通過Category添加的法會成爲原類的部分。從達到擴展個類的功能。

延展:主要作是給某類添加私有方法或是私有變量,延展可以認爲是一個私有的類目。 

兩個的區別:延展可以添加屬性並且它添加的方法是必須要實現的。

繼承和類別在實現中的區別:類別可以在不獲悉,不改變原來代碼的情況下往裏面添加新的方法,只能添加,不能刪除修改。並且如果類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,因爲類別具有更高的優先級。

Category只能爲對象添加方法,卻不能添加成員變量的原因:如果可以添加成員變量,添加的成員變量沒有辦法初始----這是語言規則



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章