IOS面試題[珍藏版] – iPhone手機開發技術文章 iPhone軟體開發教學課程

1,什麼是鍵-值,鍵路徑是什麼

 

答:模型的性質是通過一個簡單的鍵(通常是個字符串)來指定的。視圖和控制器通過鍵來查找相應的屬性值。在一個給定的實體中,同一個屬性的所有值具有相同的數據類型。鍵-值編碼技術用於進行這樣的查找—它是一種間接訪問對象屬性的機制。

鍵路徑是一個由用點作分隔符的鍵組成的字符串,用於指定一個連接在一起的對象性質序列。第一個鍵的性質是由先前的性質決定的,接下來每個鍵的值也是相對於其前面的性質。鍵路徑使您可以以獨立於模型實現的方式指定相關對象的性質。通過鍵路徑,您可以指定對象圖中的一個任意深度的路徑,使其指向相關對象的特定屬性.

2,什麼是目標-動作機制

 

目標是動作消息的接收者。一個控件,或者更為常見的是它的單元,以插座變量(參見"插座變量"部分)的形式保有其動作消息的目標。雖然目標可以是任何實現恰當的動作方法的Cocoa對象,但通常是您的定制類的一個實例。

動作是控件發送給目標的消息,或者從目標的角度看,它是目標為瞭響應動作而實現的方法。控件,或者更為常見的是它的單元,將動作存儲為SEL類型的實例變量。
SEL是一種Objective-C的數據類型,用於指定消息的簽名。動作消息必須有一個簡單而清楚的簽名,消息調用的方法沒有返回值,且隻有一個類型為id的參數。

目標和動作機制的連接:您可以在程序中設置單元和控件的目標和動作,也可以在Interface Builder中進行。對於大多數的開發者和大多數的使用場合,Interface Builder是更好的方法。當您使用Interface Builder設置控件和目標時,它可以提供視覺上的確認,並且可以支持鎖定連接,以及將連接歸檔到nib文件中。

3,什麼是KVC和KVO?

答:KVC(Key-Value-Coding)內部的實現:一個對象在調用setValue的時候,(1)首先根據方法名找到運行方法的時候所需要的環境參數。(2)他會從自己isa指針結合環境參數,找到具體的方法實現的接口。(3)再直接查找得來的具體的方法實現。KVO(Key-Value-Observing):當觀察者為一個對象的屬性進行瞭註冊,被觀察對象的isa指針被修改的時候,isa指針就會指向一個中間類,而不是真實的類。所以isa指針其實不需要指向實例對象真實的類。所以我們的程序最好不要依賴於isa指針。在調用類的方法的時候,最好要明確對象實例的類名。

4,類工廠方法是什麼

類工廠方法的實現是為瞭向客戶提供方便,它們將分配和初始化合在一個步驟中,返回被創建的對象,並進行自動釋放處理。這些方法的形式是+ (type)className…(其中 className不包括任何前綴)。工廠方法可能不僅僅為瞭方便使用。它們不但可以將分配和初始化合在一起,還可以為初始化過程提供對 象的分配信息。
類工廠方法的另一個目的是使類(比如NSWorkspace)提供單件實例。雖然init…方法可以確認一 個類在每次程序運行過程隻存在一個實例,但它需要首先分配一個“生的”實例,然後還必須釋放該實例。 工廠方法則可以避免為可能沒有用的對象盲目分配內存。

5,什麼是動態綁定

在運行時確定要調用的方法

動態綁定將調用方法的確定也推遲到運行時。在編譯時,方法的調用並不和代碼綁定在一起,隻有在消實發送出來之後,才確定被調用的代碼。通過動態類型和動態綁定技術,您的代碼每次執行都可以得到不同的結果。運行時因子負責確定消息的接收者和被調用的方法。運行時的消息分發機制為動態綁定提供支持。當您向一個動態類型確定瞭的對象發送消息時,運行環境系統會通過接收者的isa指針定位對象的類,並以此為起點確定被調用的方法,方法和消息是動態綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動獲取動態綁定的好處。您在每次發送消息時,特別是當消息的接收者是動態類型已經確定的對象時,動態綁定就會例行而透明地發生。

6,obj-c有私有方法麼?私有變量呢?

答:在Objective-C中沒有私有方法,隻有靜態方法和實例方法。但是可以用@private修飾私有變量。

7,關鍵字volatile有什麼含意?並給出三個不同的例子?

 

一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值瞭。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裡的備份。下面是volatile變量的幾個例子:

? 並行設備的硬件寄存器(如:狀態寄存器)

? 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)

? 多線程應用中被幾個任務共享的變量

 

8,What is lazy loading?

答案:懶漢模式,隻在用到的時候才去初始化。也可以理解成延時加載。
我覺得最好也最簡單的一個列子就是tableView中圖片的加載顯示瞭。
一個延時載,避免內存過高,一個異步加載,避免線程堵塞。

 

9,簡述推送流程?

https://www.dapps.net/dev/iphone/ios-push-notification-principle-realization.html

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *