iOS面試題匯總(一)_第1頁
iOS面試題匯總(一)_第2頁
iOS面試題匯總(一)_第3頁
iOS面試題匯總(一)_第4頁
iOS面試題匯總(一)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1.Difference between shallow copy and deep copy?淺復(fù)制和深復(fù)制的區(qū)別?答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔?,而不?fù)制引用對象本身。深層復(fù)制:復(fù)制引用對象本身。意思就是說我有個A 對象,復(fù)制一份后得到A_copy對象后,對于淺復(fù)制來說,A 和A_copy指向的是同一個內(nèi)存資源,復(fù)制的只不過是是一個指針,對象本身資源還是只有一份,那如果我們對A_copy執(zhí)行了修改操作, 那么發(fā)現(xiàn)A 引用的對象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一個思想。深復(fù)制就好理解了, 內(nèi)存中存在了兩份獨(dú)立對象本身。用網(wǎng)上一哥們通俗的話將就是:淺復(fù)制好比你和你的影子,你完蛋,你

2、的影子也完蛋深復(fù)制好比你和你的克隆人,你完蛋,你的克隆人還活著。2.What is advantage of categories? What is difference between implementing a category and inheritance?類別的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別?答案:category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法,因?yàn)轭悇e具有更高的優(yōu)先級。類別主要有3個作用:(1將類的實(shí)現(xiàn)分散到多個不同文件或多個不同框架中。(2創(chuàng)建對私有方法的前向引

3、用。(3向?qū)ο筇砑臃钦絽f(xié)議。繼承可以增加,修改或者刪除方法,并且可以增加屬性。3.Difference between categories and extensions?類別和類擴(kuò)展的區(qū)別。答案:category 和extensions 的不同在于后者可以添加屬性。另外后者添加的方法是必須要實(shí)現(xiàn)的。extensions 可以認(rèn)為是一個私有的Category 。4.Difference between protocol in objective c and interfaces in java? obc 中的協(xié)議和java 中的接口概念有何不同?答案:OBC 中的代理有2層含義,官方定義為

4、formal 和informal protocol 。前者和Java 接口一樣。informal protocol中的方法屬于設(shè)計模式考慮范疇,不是必須實(shí)現(xiàn)的,但是如果有實(shí)現(xiàn),就會改變類的屬性。其實(shí)關(guān)于正式協(xié)議,類別和非正式協(xié)議我很早前學(xué)習(xí)的時候大致看過,也寫在了學(xué)習(xí)教程里“非正式協(xié)議概念其實(shí)就是類別的另一種表達(dá)方式“這里有一些你可能希望實(shí)現(xiàn)的方法,你可以使用他們更好的完成工作”。這個意思是,這些是可選的。比如我門要一個更好的方法,我們就會申明一個這樣的類別去實(shí)現(xiàn)。然后你在后期可以直接使用這些更好的方法。這么看,總覺得類別這玩意兒有點(diǎn)像協(xié)議的可選協(xié)議。" 現(xiàn)在來看,其實(shí)protoca

5、l 已經(jīng)開始對兩者都統(tǒng)一和規(guī)范起來操作,因?yàn)橘Y料中說“非正式協(xié)議使用interface 修飾“,現(xiàn)在我們看到協(xié)議中兩個修飾詞:“必須實(shí)現(xiàn)(requied”和“可選實(shí)現(xiàn)(optional”。5.What are KVO and KVC?答案:kvc:鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標(biāo)識屬性,而不是通過調(diào)用存取方法,直接或通過實(shí)例變量訪問的機(jī)制。很多情況下可以簡化程序代碼。apple 文檔其實(shí)給了一個很好的例子。kvo:鍵值觀察機(jī)制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。具體用看到嗯哼用到過的一個地方是對于按鈕點(diǎn)擊變化狀態(tài)的的監(jiān)控。比如我自定義的一個button cp

6、p self addObserver:selfforKeyPath:"highlighted" options:0 context:nil; #pragma mark KVO - (voidobserveValueForKeyPath:(NSString *keyPath ofObject:(idobject change:(NSDictionary *change context:(void*context if (keyPath isEqualToString:"highlighted" self setNeedsDisplay; 對于系統(tǒng)是根據(jù)ke

7、ypath 去取的到相應(yīng)的值發(fā)生改變,理論上來說是和kvc 機(jī)制的道理是一樣的。對于kvc 機(jī)制如何通過key 尋找到value :“當(dāng)通過KVC 調(diào)用對象時,比如:self valueForKey:”someKey”時,程序會自動試圖通過幾種不同的方式解析這個調(diào)用。首先查找對象是否帶有 someKey 這個方法,如果沒找到,會繼續(xù)查找對象是否帶有someKey 這個實(shí)例變量(iVar ),如果還沒有找到,程序會繼續(xù)試圖調(diào)用 -(id valueForUndefinedKey:這個方法。如果這個方法還是沒有被實(shí)現(xiàn)的話,程序會拋出一個NSUndefinedKeyException 異常錯誤。(注

8、:Key-Value Coding查找方法的時候,不僅僅會查找someKey 這個方法,還會查找getsomeKey 這個方法,前面加一個get ,或者_(dá)someKey以及_getsomeKey這幾種形式。同時,查找實(shí)例變量的時候也會不僅僅查找someKey 這個變量,也會查找_someKey這個變量是否存在。)設(shè)計valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(idvalueForKey方法從對象中請求值時,對象能夠在錯誤發(fā)生前,有最后的機(jī)會響應(yīng)這個請求。這樣做有很多好處,下面的兩個例子說明了這樣做的好處?!皝碇羉ocoa ,這個說法應(yīng)該挺有道理。因?yàn)槲覀冎纀utto

9、n 卻是存在一個highlighted 實(shí)例變量. 因此為何上面我們只是add 一個相關(guān)的keypath 就行了,可以按照kvc 查找的邏輯理解,就說的過去了。6.What is purpose of delegates?代理的作用?答案:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針??梢詼p少框架復(fù)雜度。另外一點(diǎn),代理可以理解為java 中的回調(diào)監(jiān)聽機(jī)制的一種類似。7.What are mutable and immutable types in Objective C?obc 中可修改和不可以修改類型。答案:可修改不可修改的集合類。這個我個人

10、簡單理解就是可動態(tài)添加修改和不可動態(tài)添加修改一樣。比如NSArray 和NSMutableArray 。前者在初始化后的內(nèi)存控件就是固定不可變的,后者可以添加等,可以動態(tài)申請新的內(nèi)存空間。8.When we call objective c is runtime language what does itmean? 我們說的obc 是動態(tài)運(yùn)行時語言是什么意思?答案:多態(tài)。主要是將數(shù)據(jù)類型的確定由編譯時,推遲到了運(yùn)行時。這個問題其實(shí)淺涉及到兩個概念,運(yùn)行時和多態(tài)。簡單來說,運(yùn)行時機(jī)制使我們直到運(yùn)行時才去決定一個對象的類別,以及調(diào)用該類別對象指定方法。多態(tài):不同對象以自己的方式響應(yīng)相同的消息的能力

11、叫做多態(tài)。意思就是假設(shè)生物類(life )都用有一個相同的方法-eat; 那人類屬于生物,豬也屬于生物,都繼承了life 后,實(shí)現(xiàn)各自的eat ,但是調(diào)用是我們只需調(diào)用各自的eat 方法。也就是不同的對象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat 這個選擇器)。因此也可以說,運(yùn)行時機(jī)制是多態(tài)的基礎(chǔ)?9.what is difference between NSNotification and protocol?通知和協(xié)議的不同之處?答案:協(xié)議有控制鏈(has-a的關(guān)系,通知沒有。首先我一開始也不太明白,什么叫控制鏈(專業(yè)術(shù)語了)。但是簡單分析下通知和代理的行為模式,我們大致可以有自己的理解簡單

12、來說,通知的話,它可以一對多,一條消息可以發(fā)送給多個消息接受者。代理按我們的理解,到不是直接說不能一對多,比如我們知道的明星經(jīng)濟(jì)代理人,很多時候一個經(jīng)濟(jì)人負(fù)責(zé)好幾個明星的事務(wù)。只是對于不同明星間,代理的事物對象都是不一樣的,一一對應(yīng),不可能說明天要處理A 明星要一個發(fā)布會,代理人發(fā)出處理發(fā)布會的消息后,別稱B 的發(fā)布會了。但是通知就不一樣,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣要處理。因此控制鏈(has-a 從英語單詞大致可以看出,單一擁有和可控制的對應(yīng)關(guān)系。10.What is push notification?什么是推送消息?11.Polymorphism ?關(guān)于多態(tài)性答案:多態(tài),子

13、類指針可以賦值給父類。這個題目其實(shí)可以出到一切面向?qū)ο笳Z言中,因此關(guān)于多態(tài),繼承和封裝基本最好都有個自我意識的理解,也并非一定要把書上資料上寫的能背出來。最重要的是轉(zhuǎn)化成自我理解。12.Singleton? 對于單例的理解答案:11,12題目其實(shí)出的有點(diǎn)泛泛的感覺了,可能說是編程語言需要或是必備的基礎(chǔ)?;灸苡檬煜さ恼Z言寫出一個單例,以及可以運(yùn)用到的場景或是你編程中碰到過運(yùn)用的此種模式的框架類等。進(jìn)一步點(diǎn),考慮下如何在多線程訪問單例時的安全性。13.What is responder chain?說說響應(yīng)鏈答案:事件響應(yīng)鏈。包括點(diǎn)擊事件,畫面刷新事件等。在視圖棧內(nèi)從上至下,或者從下之上傳播???/p>

14、以說點(diǎn)事件的分發(fā),傳遞以及處理。具體可以去看下touch 事件這塊。因?yàn)閱柕奶橄蠡藝?yán)重懷疑題目出到越后面就越籠統(tǒng)。14.Difference between frame and bounds?frame 和bounds 有什么不同?答案:frame指的是:該view 在父view 坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))bounds 指的是:該view 在本身坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))15.Difference between method and selector?方法和選擇器有何不同?答案:selector 是一個方法的名字,method 是一個組合體,

15、包含了名字和實(shí)現(xiàn). 詳情可以看apple 文檔。16.Is there any garbage collection mechanism in Objective C.?OBC 的垃圾回收機(jī)制?答案: OBC2.0有Garbage collection,但是iOS 平臺不提供。一般我們了解的objective-c 對于內(nèi)存管理都是手動操作的,但是也有自動釋放池。但是差了大部分資料,貌似不要和arc 機(jī)制搞混就好了。求更多17.NSOperation queue?答案:存放NSOperation 的集合類。操作和操作隊(duì)列,基本可以看成java 中的線程和線程池的概念。用于處理ios 多線程開發(fā)的

16、問題。網(wǎng)上部分資料提到一點(diǎn)是,雖然是queue ,但是卻并不是帶有隊(duì)列的概念,放入的操作并非是按照嚴(yán)格的先進(jìn)現(xiàn)出。這邊又有個疑點(diǎn)是,對于隊(duì)列來說,先進(jìn)先出的概念是Afunc 添加進(jìn)隊(duì)列,Bfunc 緊跟著也進(jìn)入隊(duì)列,Afunc 先執(zhí)行這個是必然的,但是Bfunc 是等Afunc 完全操作完以后,B 才開始啟動并且執(zhí)行,因此隊(duì)列的概念離亂上有點(diǎn)違背了多線程處理這個概念。但是轉(zhuǎn)念一想其實(shí)可以參考銀行的取票和叫號系統(tǒng)。因此對于A 比B 先排隊(duì)取票但是B 率先執(zhí)行完操作,我們亦然可以感性認(rèn)為這還是一個隊(duì)列。但是后來看到一票關(guān)于這操作隊(duì)列話題的文章,其中有一句提到“因?yàn)閮蓚€操作提交的時間間隔很近,線程池

17、中的線程,誰先啟動是不定的?!彼查g覺得這個queue 名字有點(diǎn)忽悠人了,還不如pool綜合一點(diǎn),我們知道他可以比較大的用處在于可以幫組多線程編程就好了。18.What is lazy loading?答案:懶漢模式,只在用到的時候才去初始化。也可以理解成延時加載。我覺得最好也最簡單的一個列子就是tableView 中圖片的加載顯示了。一個延時載,避免內(nèi)存過高,一個異步加載,避免線程堵塞。19.Can we use two tableview controllers on one viewcontroller?是否在一個視圖控制器中嵌入兩個tableview 控制器?答案:一個視圖控制只提供了一

18、個View 視圖,理論上一個tableViewController 也不能放吧,只能說可以嵌入一個tableview 視圖。當(dāng)然,題目本身也有歧義,如果不是我們定性思維認(rèn)為的UIViewController ,而是宏觀的表示視圖控制者,那我們倒是可以把其看成一個視圖控制者,它可以控制多個視圖控制器,比如TabbarController 那樣的感覺。20.Can we use one tableview with two different datasources? How you will achieve this?一個tableView 是否可以關(guān)聯(lián)兩個不同的數(shù)據(jù)源?你會怎么處理?答案:首先

19、我們從代碼來看,數(shù)據(jù)源如何關(guān)聯(lián)上的,其實(shí)是在數(shù)據(jù)源關(guān)聯(lián)的代理方法里實(shí)現(xiàn)的。因此我們并不關(guān)心如何去關(guān)聯(lián)他,他怎么關(guān)聯(lián)上,方法只是讓我返回根據(jù)自己的需要去設(shè)置如相關(guān)的數(shù)據(jù)源。因此,我覺得可以設(shè)置多個數(shù)據(jù)源啊,但是有個問題是,你這是想干嘛呢?想讓列表如何顯示,不同的數(shù)據(jù)源分區(qū)塊顯示?21.Object c 的類可以多重繼承么?可以實(shí)現(xiàn)多個接口么?重寫一個類的方式用繼承好還是分類好?為什么?Objective-c 只支持單繼承,如果要實(shí)現(xiàn)多繼承的話,可以通過類別和協(xié)議的方式來實(shí)現(xiàn),cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用protocol 委托代理來實(shí)現(xiàn)的。22.#impor

20、t 跟#include 又什么區(qū)別import<>跟 #import""又什么區(qū)別?答案:class一般用于頭文件中需要聲明該類的某個實(shí)例變量的時候用到,在m 文件中還是需要使用#import而#import比起#include的好處就是不會引起交叉編譯。23. 類變量的protected ,private,public,package聲明各有什么含義?24.id 聲明的對象有什么特性?答案:id 是個很重要的類型,是個可以指向任何類型的指針或者可以理解為指向任何未知類型的指針。25.MVC 是什么?有什么特性?為什么在iPhone 上被廣泛運(yùn)用? 答案:MVC

21、 設(shè)計模式考慮三種對象:模型對象、視圖對象、和控制器對象。模型對象代表特別的知識和專業(yè)技能,它們負(fù)責(zé)保有應(yīng)用程序的數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯。視圖對象知道如何顯示應(yīng)用程序的模型數(shù)據(jù),而且可能允許用戶對其進(jìn)行編輯??刂破鲗ο笫菓?yīng)用程序的視圖對象和模型對象之間的協(xié)調(diào)者。26. 對于語句NSString* testObject = NSData allocinit;testObject 在編譯時和運(yùn)行時分別是什么類型的對象? 27.什么是安全釋放? 28.為什么有些 4.0 獨(dú)有的 objectivec 函數(shù)在 3.1 上運(yùn)行時會報錯. 而 4.0 獨(dú)有的類在 3.1 上分配內(nèi)存時不會報錯?分配的結(jié)果

22、是什么? 29.為什么 4.0 獨(dú)有的 c 函數(shù)在 3.1 的機(jī)器上運(yùn)行不會報錯(在沒有調(diào) 用的情況下?)而 4.0 獨(dú)有的類名在 3.1 的機(jī)器上一運(yùn)行就報錯? 30.異常 exception 怎么捕獲?不同的 CPU 結(jié)構(gòu)上開銷怎樣?C 中又 什么類似的方法? 31.property 中屬性 retain,copy,assgin 的含義分別是什么?有什么區(qū) 別?將其轉(zhuǎn)換成 getset 方法怎么做?有什么注意事項(xiàng)? 32.委托是什么?委托的 property 聲明用什么屬性?為什么? 34.Cocoa 中有虛基類的概念么?怎么簡潔的實(shí)現(xiàn)? 35.自動釋放池跟 GC(垃圾回收)有什么區(qū)別?i

23、Phone 上有 GC 么? pool release和pool drain有什么區(qū)別? iPhone 上沒有 GC。iPhone 開發(fā)的時候沒有垃圾回收機(jī)制。 在垃圾回收環(huán)境中,release 是一個空操作。因此,NSAutoreleasePool 提供了 drain 方法,在引用計數(shù)環(huán)境中,該方法的作用等同于調(diào)用 答案: 進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運(yùn)行的基本單元,系統(tǒng) 利用該基本單元實(shí)現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。 程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。 進(jìn)程有 獨(dú)立的地址空間,一個進(jìn)程崩潰后,在保護(hù)模式下不會對其它進(jìn)程產(chǎn)生 影響,而線程只是一個進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局 部變量,但線程之間沒有單獨(dú)的地址空間,一個線程死掉就等于整個進(jìn) 程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時, 耗費(fèi)資源較大,效率要差一些。但對于一些要求同時進(jìn)行并且又要共享 某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。 42.在 iphone 上有兩件事情要做,請問是在一個線程里按順序做效率高 還是兩個線程里做效率高?為什么? 43.runloop 是什么?在主線程中的某個函數(shù)里調(diào)用了異步函數(shù),怎么 樣 block 當(dāng)前線程,且還能響應(yīng)當(dāng)前線程的 timer 事件,touch 事件等. 44.ios

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論