iOS面試題3(答案)

1、 簡述你對UIView、UIWindow和CALayer的理解
UIView繼承於UIResponder, UIResponder繼承於NSObject,UIView可以響應用戶事件。CALayer繼承於NSObject,所以CALayer不能響應事件。
UIView構建界面,UIView側重於對內容的管理,CALayer側重於對內容的繪製。
UIView是用來顯示內容的,可以處理用戶事件;CALayer是用來繪製內容的,對內容進行動畫處理,依賴與UIView來進行顯示,不能處理用戶事件。

2、 分析jsonxml的區別?json、xml解析方式的底層是如何處理的?
json底層原理遍歷字符串中的字符,最終根據各市規定的特助字符,比如{}[],:號等進行區分,{}是字典,[]表示的時數組,:號是字典的鍵和值的分水嶺,最總是將json數據轉化爲字典。Xml兩種解析方式,DOMSAX,DOM需要讀入整個XML文檔(文檔驅動),SAX是事件驅動的,並不需要讀入整個文檔,文檔的讀入過程也就是SAX的解析過程。

3、 ViewController  didReceiveMemoryWarning 是在什麼時候被調用的?默認的操作是什麼?
didReceiveMemoryWarning在出現內存警告的時候執行該方法,在該方法裏面釋放掉暫時沒使用的可重用的對象。

if([self isViewLoaded] == YES && self.view.window == nil)

    {

        self.view = nil;

    }

4、 面向對象的三大特徵,並作簡單的介紹
封裝、繼承、多態。封裝:是把客觀事物封裝成抽象的類,隱藏內部的實現,對外部提供接口。繼承:可以使用現有類的所有功能,並且在無需重新編寫原來的類的情況下對這些功能進行擴展。多態:不同的對象以自己的方式響應相同的的消息的能力叫做多態,或者說父類指針指向子類對象<UITableView的,cellForRow方法,返回值類型是UITbaleViewCell,但是你返回的cell可以是你自定義的cell,在比如多個類裏面都有同一個方法>

5、 簡述NotificationCenter、KVC、KVO、Delegate?並說明它們之間的區別?
Notification:觀察者模式,controllerdefaultNotificationCenter添加自己的 notification,其他類註冊這個notification就可以收到通知,這些類可以在收到通知時做自己的操作(多觀察者默認隨機順序發通知給 觀察者們,而且每個觀察者都要等當前的某個觀察者的操作做完才能輪到他來操作,可以用NotificationQueue的方式安排觀察者的反應順序,也 可以在添加觀察者中設定反映時間,取消觀察需要在viewDidUnload dealloc中都要註銷)

KVC鍵值編碼,可以直接通過字符串的名字(key)來間接訪問屬性的機制,而不是通過調用gettersetter方法訪問。
KVO:觀測指定對象的屬性,當指定對象的屬性更改之後會通知相應的觀察者。
delegate:一對一,delegate遵循某個協議並實現協議聲明的方法。

6、分別描述類別categories延展(extensions)是什麼?以及兩者的區別?繼承和類別在實現中有何區別?爲什麼Category只能爲對象添加方法,卻不能添加成員變量?
category類目:在不知道源碼的情況下爲一個類擴展方法,extension:爲一個類聲明私有方法和變量。
繼承是創建了一個新的類,而類別只是對類的一個擴展,還是之前的類。
類目的作用就是爲已知的類添加方法。

7、#import#include@class有什麼區別?
#include c語言中引入一個頭文件,但是可能出現交叉編譯
#importOC中引入自己創建的頭文件#import””或者系統框架#import<>#import不會出現交叉編譯
@class對一個類進行聲明,告訴編譯器有這個類,但是類的定義什麼的都不知道。

8、 談談你對MVC的理解?爲什麼要用MVC?在CocoaMVC是怎麼實現的?你還熟悉其他的OC設計模式或別的設計模式嗎?
MVCModel-VIew-Controller,就是模型-視圖-控制器, MVC把軟件系統分爲三個部分:ModelViewController。在cocoa中,你的程序中的每一個object(對象)都將明顯地僅屬於這三部分中的一個,而完全不屬於另外兩個。MVC可以幫助確保幫助實現程序最大程度的可重用性。各MVC元素彼此獨立運作,通過分開這些元素,可以構建可維護,可獨立更新的程序組建。
單例模式,delegate設計模式,target-action設計模式。

9、如何監測系統鍵盤的彈出?
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector( ) name:UIKeyboardWillShowNotification object:nil];

10、objc中的減號與加號代表什麼?
+靜態方法,也叫類方法,-實例方法。





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