1,簡述你對UIView、UIWindow和CALayer的理解
UIView繼承于UIResponder, UIResponder繼承于NSObject,UIView可以響應用戶事件。CALayer繼承于NSObject,所以CALayer不能響應事件。UIView構建界面,UIView側重于對內容的管理,CALayer側重于對內容的繪制。UIView是用來顯示內容的,可以處理用戶事件;CALayer是用來繪制內容的,對內容進行動畫處理,依賴與UIView來進行顯示,不能處理用戶事件。
2,寫一個完整的代理,包括聲明,實現
略
3,分析json、xml的區別?json、xml解析方式的底層是如何處理的?
XML是標準通用標記語言 (SGML)的子集,非常適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據。
JSON(JavaScriptObject Notation)一種輕量級的數據交換格式,具有良好的可讀
和便于快速編寫的特性??稍诓煌脚_之間進行數據交換。JSON采用兼容性很
高的、完全獨立 于語言文本格式,同時也具備類似于C語言的習慣(包括C,
C++, C#, Java, JavaScript, Perl,Python等)體系的行為。這些特性使JSON成為理想
的數據交換語言。
4,ViewController 的 didReceiveMemoryWarning 是在什么時候被調用的?默認的操作是什么?
didReceiveMemoryWarning在出現內存警告的時候執行該方法,在該方法里面釋放掉暫時沒使用的可重用的對象。這個方法不能手動調用.
5,面向對象的三大特征,并作簡單的介紹
封裝、繼承、多態。封裝:是把客觀事物封裝成抽象的類,隱藏內部的實現,對外部提供接口。繼承:可以使用現有類的所有功能,并且在無需重新編寫原來的類的情況下對這些功能進行擴展。多態:不同的對象以自己的方式響應相同的的消息的能力叫做多態,或者說父類指針指向子類對象<如UITableView的,cellForRow方法,返回值類型是UITbaleViewCell,但是你返回的cell可以是你自定義的cell,在比如多個類里面都有同一個方法>
6,重寫一個NSStrng類型的,retain方式聲明name屬性的setter和getter方法
略
7,簡述NotificationCenter、KVC、KVO、Delegate?并說明它們之間的區別?
Notification:觀察者模式,觀察者模式一般用于一對多, 發出消息者并不在意有沒有\有多少個接收者, 只管發出消息. 觀察者模式的效率低于代理模式. KVC鍵值編碼,可以直接通過字符串的名字(key)或者路徑來間接訪問屬性的機制,而不是通過調用getter和setter方法訪問。
KVO:觀測指定對象的屬性,當指定對象屬性的setter方法被調用之后會通知相應的觀察者。
delegate:一對一,delegate遵循某個協議并實現協議聲明的方法。
8,What is lazy loading?
懶加載,又稱為延遲加載。通常用法,你有一個UITextField類 型的property,簡單定義為userNameTextField,但是你不在初始化方法里為其alloc/init,它就只是一個指針,不會占用內 存。在訪問器里判斷此property的指針是否為空,若為空,就alloc/init,這時才真正生成這個對象除非這個對象被使用,否則它永遠不會真正 生成,也就不會占用內存。
9,什么是Protocol?什么是代理?寫一個委托的interface?委托的property聲明用什么屬性?為什么?
協議提供了一組方法,但是并不負責實現,如果一個類遵循了某個協議,并且實現了協議里面的方法,那么我們稱這個類就是遵循了某個協議的代理。屬性的聲明使用assign,防止出現循環引用的問題。
10,分別描述類別(categories)和延展(extensions)是什么?以及兩者的區別?繼承和類別在實現中有何區別?為什么Category只能為對象添加方法,卻不能添加成員變量?
category類目:在不知道源碼的情況下為一個類擴展方法,extension:為一個類聲明私有方法和變量。繼承是創建了一個新的類,而類別只是對類的一個擴展,還是之前的類。
類目的作用就是為已知的類添加方法。