IOS常見問題

1.Difference between shallow copy and deep copy? 淺複製和深複製的區別? 
java

答案:淺層複製:只複製指向對象的指針,而不復制引用對象自己。 深層複製:複製引用對象自己。 ios

意思就是說我有個A對象,複製一份後獲得A_copy對象後,對於淺複製來講,A和A_copy指向的是同一個內存資源,複製的只不過是是一個指針,對象自己資源 objective-c

仍是隻有一份,那若是咱們對A_copy執行了修改操做,那麼發現A引用的對象一樣被修改,這其實違背了咱們複製拷貝的一個思想。深複製就好理解了,內存中存在了 兩份獨立對象自己。 編程

用網上一哥們通俗的話將就是: 設計模式

淺複製比如你和你的影子,你完蛋,你的影子也完蛋 深複製比如你和你的克隆人,你完蛋,你的克隆人還活着安全

2.What is advantage of categories? What is difference between implementing a category and inheritance? 服務器

類別的做用?繼承和類別在實現中有何區別? 多線程

答案:category 能夠在不獲悉,不改變原來代碼的狀況下往裏面添加新的方法,只能添加,不能刪除修改。 app

而且若是類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,由於類別具備更高的優先級。 框架

類別主要有3個做用: 

(1)將類的實現分散到多個不一樣文件或多個不一樣框架中。 (2)建立對私有方法的前向引用。 (3)向對象添加非正式協議。 

 繼承能夠增長,修改或者刪除方法,而且能夠增長屬性。  

3.Difference between categories and extensions? 類別和類擴展的區別。 

 答案:category和extensions的不一樣在於 後者能夠添加屬性。另外後者添加的方法是必需要實現的。 

extensions能夠認爲是一個私有的Category。

 4.Difference between protocol in objective c and interfaces in java? oc中的協議和java中的接口概念有何不一樣? 

答案:OC中的代理有2層含義,官方定義爲 formal和informal protocol。前者和Java接口同樣。 

informal protocol中的方法屬於設計模式考慮範疇,不是必須實現的,可是若是有實現,就會改變類的屬性。 

其實關於正式協議,類別和非正式協議我很早前學習的時候大體看過,也寫在了學習教程裏 「非正式協議概念其實就是類別的另外一種表達方式「這裏有一些你可能但願實現的方法,你可使用他們更好的完成工做」。 

這個意思是,這些是可選的。好比我門要一個更好的方法,咱們就會申明一個這樣的類別去實現。而後你在後期能夠直接使用這些更好的方法。 這麼看,總以爲類別這玩意兒有點像協議的可選協議。" 

如今來看,其實protocal已經開始對二者都統一和規範起來操做,由於資料中說「非正式協議使用interface修飾「, 

如今咱們看到協議中兩個修飾詞:「必須實現(@requied)」和「可選實現(@optional)」。  

5.What are KVO and KVC? 

答案:kvc:鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標識屬性,而不是經過調用存取方法,直接或經過實例變量訪問的機制。 

不少狀況下能夠簡化程序代碼。apple文檔其實給了一個很好的例子。 kvo:鍵值觀察機制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。 具體用看到嗯哼用到過的一個地方是對於按鈕點擊變化狀態的的監控。 好比我自定義的一個button 

[cpp] view plaincopy 

1. [self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];   2.    3.    

4. #pragma mark KVO   5.    

6. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object chang

e:(NSDictionary *)change context:(void *)context   7. {   

8.     if ([keyPath isEqualToString:@"highlighted"] ) {   9.         [self setNeedsDisplay];   10.     }   11. }   

 

 

對於系統是根據keypath去取的到相應的值發生改變,理論上來講是和kvc機制的道理是同樣的。 

對於kvc機制如何經過key尋找到value: 

「當經過KVC調用對象時,好比:[self valueForKey:@」someKey」]時,程序會自動試圖經過幾種不一樣的方式解析這個調用。首先查找對象是否帶有 someKey 這個方法,若是沒找到,會繼續查找對象是否帶有someKey這個實例變量(iVar),若是尚未找到,程序會繼續試圖調用 -(id) valueForUndefinedKey:這個方法。若是這個方法仍是沒有被實現的話,程序會拋出一個NSUndefinedKeyException異常錯誤。   

(cocoachina.com注:Key-Value Coding查找方法的時候,不只僅會查找someKey這個方法,還會查找getsomeKey這個方法,前面加一個get,或者_someKey以及_getsomeKey這幾種形式。同時,查找實例變量的時候也會不只僅查找someKey這個變量,也會查找_someKey這個變量是否存在。)   

設計valueForUndefinedKey:方法的主要目的是當你使用-(id)valueForKey方法從對象中請求值時,對象可以在錯誤發生前,有最後的機會響應這個請求。這樣作有不少好處,下面的兩個例子說明了這樣作的好處。「 來至cocoa,這個說法應該挺有道理。 

由於咱們知道button倒是存在一個highlighted實例變量.所以爲什麼上面咱們只是add一個相關的keypath就好了, 

能夠按照kvc查找的邏輯理解,就說的過去了。

6.What is purpose of delegates? 代理的做用? 

答案:代理的目的是改變或傳遞控制鏈。容許一個類在某些特定時刻通知到其餘類,而不須要獲取到那些類的指針。能夠減小框架複雜度。 

另一點,代理能夠理解爲java中的回調監聽機制的一種相似。  

7.What are mutable and immutable types in Objective C? oc中可修改和不能夠修改類型。 

答案:可修改不可修改的集合類。這個我我的簡單理解就是可動態添加修改和不可動態添加修改同樣。 

好比NSArray和NSMutableArray。前者在初始化後的內存控件就是固定不可變的,後者能夠添加等,能夠動態申請新的內存空間。 

 

8.When we call objective c is runtime language what does it mean? 

 

咱們說的oc是動態運行時語言是什麼意思? 

答案:多態。 主要是將數據類型的肯定由編譯時,推遲到了運行時。 這個問題其實淺涉及到兩個概念,運行時和多態。 

簡單來講,運行時機制使咱們直到運行時纔去決定一個對象的類別,以及調用該類別對象指定方法。 

多態:不一樣對象以本身的方式響應相同的消息的能力叫作多態。意思就是假設生物類(life)都用有一個相同的方法-eat; 

那人類屬於生物,豬也屬於生物,都繼承了life後,實現各自的eat,可是調用是咱們只需調用各自的eat方法。 

也就是不一樣的對象以本身的方式響應了相同的消息(響應了eat這個選擇器)。 所以也能夠說,運行時機制是多態的基礎?~~~  

9.what is difference between NSNotification and protocol? 通知和協議的不一樣之處? 

答案:協議有控制鏈(has-a)的關係,通知沒有。 

首先我一開始也不太明白,什麼叫控制鏈(專業術語了~)。可是簡單分析下通知和代理的行爲模式,咱們大體能夠有本身的理解 

簡單來講,通知的話,它能夠一對多,一條消息能夠發送給多個消息接受者。 

代理按咱們的理解,到不是直接說不能一對多,好比咱們知道的明星經濟代理人,不少時候一個經濟人負責好幾個明星的事務。 

只是對於不一樣明星間,代理的事物對象都是不同的,一一對應,不可能說明天要處理A明星要一個發佈會,代理人發出處理髮佈會的消息後,別稱B的 

發佈會了。可是通知就不同,他只關心發出通知,而不關心多少接收到感興趣要處理。 所以控制鏈(has-a從英語單詞大體能夠看出,單一擁有和可控制的對應關係。  

10.What is push notification? 什麼是推送消息? 

答案:太簡單,不做答~~~~~~~~~~ 這是cocoa上的答案。 

其實到不是說太簡單,只是太泛泛的一個概念的東西。就比如說,什麼是人。 推送通知更是一種技術。 

簡單點就是客戶端獲取資源的一種手段。 普通狀況下,都是客戶端主動的pull。 

推送則是服務器端主動push。  

11.what is Polymorphism? 關於多態性 

答案:多態,子類指針能夠賦值給父類。 這個題目其實能夠出到一切面向對象語言中, 

所以關於多態,繼承和封裝基本最好都有個自我意識的理解,也並不是必定要把書上資料上寫的能背出來。 

最重要的是轉化成自我理解。  

12.what is Singleton? 對於單例的理解 

答案:11,12題目其實出的有點泛泛的感受了,可能說是編程語言須要或是必備的基礎。 基本能用熟悉的語言寫出一個單例,以及能夠運用到的場景或是你編程中碰到過運用的此種模式的框架類等。 

進一步點,考慮下如何在多線程訪問單例時的安全性。  

13.What is responder chain? 說說響應鏈 

答案: 事件響應鏈。包括點擊事件,畫面刷新事件等。在視圖棧內從上至下,或者從下之上傳播。 

能夠說點事件的分發,傳遞以及處理。具體能夠去看下touch事件這塊。由於問的太抽象化了 

嚴重懷疑題目出到越後面就越籠統。  

14.Difference between frame and bounds? frame和bounds有什麼不一樣? 

答案:frame指的是:該view在父view座標系統中的位置和大小。(參照點是父親的座標系統) 

bounds指的是:該view在自己座標系統中 的位置和大小。(參照點是自己座標系統)  

15.Difference between method and selector? 方法和選擇器有何不一樣? 

答案:selector是一個方法的名字,method是一個組合體,包含了名字和實現. 詳情能夠看apple文檔。 

 

16.Is there any garbage collection mechanism in Objective C.? OC的垃圾回收機制? 

答案: OC2.0有Garbage collection,可是iOS平臺不提供。 

通常咱們瞭解的objective-c對於內存管理都是手動操做的,可是也有自動釋放池。 可是差了大部分資料,貌似不要和arc機制搞混就行了。 求更多~~  

17.NSOperation queue? 

答案:存放NSOperation的集合類。 

操做和操做隊列,基本能夠當作java中的線程和線程池的概念。用於處理ios多線程開發的問題。 

網上部分資料提到一點是,雖然是queue,可是卻並非帶有隊列的概念,放入的操做並不是是按照嚴格的先進現出。 

這邊又有個疑點是,對於隊列來講,先進先出的概念是Afunc添加進隊列,Bfunc緊跟着也進入隊列,Afunc先執行這個是必然的, 

可是Bfunc是等Afunc徹底操做完之後,B纔開始啓動而且執行,所以隊列的概念離亂上有點違背了多線程處理這個概念。 

可是轉念一想其實能夠參考銀行的取票和叫號系統。 

所以對於A比B先排隊取票可是B率先執行完操做,咱們亦然能夠感性認爲這仍是一個隊列。 

可是後來看到一票關於這操做隊列話題的文章,其中有一句提到 

「由於兩個操做提交的時間間隔很近,線程池中的線程,誰先啓動是不定的。」 瞬間以爲這個queue名字有點忽悠人了,還不如pool~ 

綜合一點,咱們知道他能夠比較大的用處在於能夠幫組多線程編程就行了。  

18.What is lazy loading? 

答案:懶漢模式,只在用到的時候纔去初始化。 也能夠理解成延時加載。 

我以爲最好也最簡單的一個列子就是tableView中圖片的加載顯示了。 一個延時載,避免內存太高,一個異步加載,避免線程堵塞。  

19.Can we use two tableview controllers on one viewcontroller? 是否在一個視圖控制器中嵌入兩個tableview控制器? 

答案:一個視圖控制只提供了一個View視圖,理論上一個tableViewController也不能放吧, 

只能說能夠嵌入一個tableview視圖。固然,題目自己也有歧義,若是不是咱們定性思惟認爲的UIViewController, 

而是宏觀的表示視圖控制者,那咱們卻是能夠把其當作一個視圖控制者,它能夠控制多個視圖控制器,好比TabbarController 那樣的感受。  

20.Can we use one tableview with two different datasources? How you will achieve this? 

一個tableView是否能夠關聯兩個不一樣的數據源?你會怎麼處理? 

答案:首先咱們從代碼來看,數據源如何關聯上的,實際上是在數據源關聯的代理方法裏實現的。 

所以咱們並不關心如何去關聯他,他怎麼關聯上,方法只是讓我返回根據本身的須要去設置如相關的數據源。 

所以,我以爲能夠設置多個數據源啊,可是有個問題是,你這是想幹嗎呢?想讓列表如何顯示,不一樣的數據源分區塊顯示?

相關文章
相關標籤/搜索