2012-01-14 22 views
7

我是iOS開發新手。我已經閱讀了我在網上找到的一些源代碼,其中很多都沒有包含單個的nib文件。所有的視圖似乎都是從代碼手動繪製的。應該或不應該使用nib文件?

有/沒有nib文件的好處是什麼?他們爲什麼選擇從代碼創建所有東西,而不是可以形象化的東西,如故事板或* .xib文件?

+0

不要忘記:「iOS 5及更高版本支持的故事板是 ,對於新項目默認啓用。如果您的應用程序必須在較早的版本的iOS上運行 ,但不能使用故事板並應繼續使用nib文件「。 (iOs App編程指南©Apple Inc)。 – Kenneth 2013-02-22 10:52:36

回答

5

有一些非常簡單的筆尖,比如典型的MainWindow.nib,它沒有本地化的內容,並且可以用一行代碼進行復制。在這種情況下,代碼比取消存檔筆尖要快得多。

也有高度動態的佈局,這是不可能描述爲筆尖。

您應該在每個特定情況下選擇最方便和有效的方式。總是會有權衡,只需明智地選擇。

7

有很多原因可以在代碼中創建視圖。

  • 筆尖文件是延遲加載和某個導致明顯缺乏反應的哪些用戶不喜歡
  • 你不能在IB配置的一切,很多意見需要一些花哨的附加功能
  • 有時更容易只寫你的看法跌多點擊和拖動所有需要的東西一起
  • ...

我認爲最重要的原因是缺乏性能和功能。

我正在使用筆尖文件,當我只想顯示簡單的按鈕和標籤和原型的簡單信息。

11

我喜歡的代碼最大的原因是它在源代碼控制中有很好的差異。 XIB很難區分,合併和閱讀。

代碼也很容易複製/粘貼保存的代碼片段。通過IB,我總是會忘記一些複選框,這讓我想知道爲什麼這個魔術不起作用。我的筆記有代碼片段。

什麼IB真正擅長的是佈局和幫助您與人類界面指南(控件之間的像素數量等...與guiedlines)。因此,我個人的偏好是IB中的佈局和代碼中的所有其他內容(包括目標,動作,添加列等等)。然而,在動態的情況下,IB崩潰了,你最終得到自定義視圖。

這裏有一個相關的職位:

Interface Builder (XIB) or Code when merging in a team environment?

9

有關於爲什麼要使用筆尖的原因很多,爲什麼你不應該。沒有明確的答案,每個答案都取決於你需要做什麼。除了Nib提供的明顯優勢(快速的UI創建過程,最小化.m文件中的視圖構建代碼)之外,它們提供了一些您無法找到的其他方式:解決本地化問題。在將您的應用程序本地化爲其他語言的同時,您會遇到需要2-3個單詞才能解釋的短語和事物,而使用另一種語言只需要一個。當使用不同的本地化時,這嚴重地導致在視圖控制器內放錯視圖的錯誤。所以,你可以在Xcode 4中爲每個筆尖設置2-3個子筆尖,並按照你喜歡的方式將每個筆尖本地化,並將按鈕和視圖放置在正確的位置,而不用擔心根據語言用戶擁有。如果你要使用代碼來完成所有這些工作,你應該把'if'放在任何地方,這當然是一種糟糕的編程習慣,並且容易出錯。

我創建了一些視圖控制器,如果我不使用界面構建器,只需要幾百行來設置視圖。因爲每個NIB都是用HTML/XML編寫的視圖描述符,並且在創建任何視圖之前,必須從磁盤讀取文件並進行分析,因此NIB永遠不會實現以編程方式創建視圖的性能。筆尖也缺乏簡單代碼所具有的自定義選項(陰影,圓角和其他石英魔法)。這些自定義選項是不可用的,因爲有很多方法可以通過代碼實現相同的結果,或者通過與更高級別的Core Animation層進行交談,或者直接尋址QuartCore和CGGraphics並在那裏執行重要的東西,這當然更快,並且在大多數情況下推薦案例(使用圖層的陰影可能非常慢)。所以蘋果公司不希望將開發限制爲繪製事物的特定方式。

NIBs的存在是有原因的。您必須確保在您的應用程序中瞭解創建NIB的原因。存在用於將代碼連接到網點的便利,便於本地化,加速開發並清理代碼。在一個項目中,你必須使用Nibs,但是你也必須避免在簡單代碼以最小或類似的努力給你相同的結果的地方使用它們。

最後但並非最不重要的是,考慮內存管理。使用Nib將影響IBOutlets等分配對象的釋放。如果您的競技場確定您創建的IBOutlet將在您想要時被釋放,請不要使用NIB。改用普通的代碼。

0

我會從xibs開始。一旦你完成了用戶界面,然後將你的xib遷移到代碼。這樣你就可以得到兩全其美的好處。 XIB可以很慢,我已經看到400KB XIBS(雖然很少見)。 XIBs肯定這些混沌,但...

1
A nib file is a special type of resource file that you use to store the user interfaces of iOS and Mac apps. A nib file is an Interface Builder document. You use Interface Builder to design the visual parts of your app—such as windows and views—and sometimes to configure nonvisual objects, such as the controller objects that your app uses to manage its windows and views. In effect, as you edit an Interface Builder document, you create an object graph that is then archived when you save the file. When you load the file, the object graph is unarchived. 

筆尖文件,因此對象圖,可能包含用來指生活在其中的文件之外,但可能在對對象的引用對象的佔位符對象文檔或文檔中的哪些對象可能具有引用。一個特殊的佔位符是文件的所有者。

在運行時,使用方法loadNibNamed:owner:或其變體加載nib文件。文件的所有者是作爲該方法的所有者參數傳遞的對象的nib文件中的佔位符。當您在運行時加載文件時,無論您與Interface Builder中nib文件的文件所有者建立的連接都重新建立。

iOS使用筆尖作爲支持故事板的實現細節,即iOS用戶界面設計佈局格式。故事板允許您在一個畫布上設計和可視化應用程序的整個用戶界面。對於iOS開發人員,使用故事板是設計用戶界面的推薦方式。