一.淺拷貝和深拷貝的區別
1.淺拷貝是指針拷貝,對一個對象淺拷貝就是對該對象的指針進行復制產生一個新的指針指向該對象,這個對象銷毀后,兩個指針都為空。
2.深拷貝是指對象拷貝,對對象進行復制產生新的對象,兩個指針分別指向兩個對象,一個對象改變或銷毀,另一個對象不受影響。
二.父類實現深拷貝時,子類如何實現,父類沒有實現時,子類如何實現
父類實現深拷貝時,子類只需要重寫copyWithZone方法,在方法內部調用父類的方法后,實現自己的屬性處理,父類沒有實現的時候,子類不僅要對自身的屬性進行處理,還要對父類的屬性進行處理。
三.OC中的協議和java的接口概念有何不同
OC中的協議于java中的接口概念基本一致,OC中非正式協議就是類別。在java中如果繼承了接口,但不實現其方法,會得到一個error(無法編譯);在OC中的正式協議,如果不實現,會得到一個warning(可編譯執行),如果想去waring,還可以加關鍵字(@optional),讓它可選實現方法。
四.什么是KVO和KVC
KVC:鍵-值編碼是一種間接訪問對象的屬性使用字符串來標識屬性,而不是通過調用存取方法,直接或通過實例變量訪問的極致。
KVO:鍵值觀察極致,提供了觀察某一屬性變化的方法,極大的簡化了代碼。
五.代理的用途是什么
代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架復雜度。
六.KVO,NSNotification,delegate及block區別
1.KVO:是cocoa框架實現的觀察者模式,一般同KVC搭配使用,可以件次一個值的變化,是一對多的關系,一個值的便會,會通知所有的觀察著。
2.NSNotification:通知,也是一對多的使用場景。特點是需要唄觀察著主動發出通知后,觀察者注冊監聽后再來進行響應,比KVO多了發送通知一步,監聽不局限于屬性變化,還可以對多鐘狀態變化進行監聽。
3.deledate:是代理,通過代理通知,后調用代理,由其他類完成所需要的操作,是一對一的關系。
4.block是delegate的另一種形式,是函數式編程的一種形式,相比delegate更靈活,代理的實現更直觀.
另外KVO一般的使用場景是數據變化,delegate一般的使用場景行為,NSNotification一般是進行全局通知。
七.我們說的OC是動態運行時語言時什么意思?
多態,主要是將數據類型的確定由編譯時,推遲到了運行時。
簡單的來說,運行時機制使我們知道運行時才去決定一個對象的類別,以及調用該類別對象制定方法。
多態:不同對象以自己的方式響應相同的消息能力叫做多態。父類指針指向子類對象。
八.frame和bounds有什么不同
frame:該View在父View坐標系統中的位置和大小,參照點是父類的坐標。
bounds:該View在本身坐標系統中的位置和大小,參照點是本身的系統坐標。
九.copy是深拷貝還是淺拷貝
http://zhidao.baidu.com/link?url=k7WfvoWD09CyYPgk1rcJeNWp8u5OYDAy5y9-_NuiwC--5xhxyjnT8kvh-uj93-VxvCcHRvqn6hYB9uOgnn5LBU4tHlLxj1Z22L2J7-PiLfW
十. id和NSObject的區別
id:可以理解為指向對象的指針,所有OC對象id都可以指向,id可以調用任何方法都不會在編譯階段報錯。
NSObject:指向必須是NSObject的子類,還有一些繼承自NSProcy,NSObject*可指向的類型都是id的子集。