iOS開發過程中,你更喜歡用Storyboard/xib做界面,還是直接用代碼來寫界面?
代碼。基本不用xib,storyboard沒用過。有時會用xib擺擺位置,找找坐標,真正項目中還是代碼。原因:1、storyboard這個東西是最近才出的,而我已經寫了兩年的iOS,習慣了。2、工程做大了,需要精確控制內存的載入釋放,界面、數據的載入順序,內存警告時的釋放順序,用storyboard很難把性能優化到最佳。3、一個人的項目或者是一個簡單的小應用可以用storyboar,一目了然,實現也簡單。但是十幾個人共同開發,並且人員經常變動的項目,用代碼的優勢就很明顯了。
最近開始學習iOS編程不久,看到上面很多不負責任的答案,這裡勉強發表一些個人觀點,剖磚引玉吧。
先說觀點:能用storyboard的地方盡量用storyboard。
先說一下用storyboard的優點:- storyboard是個新事物。新東西往往會總結之前工具的缺點並儘可能的解決他們,storyboard也肩負著這個責任。
- storyboard使頁面布局變得更為簡潔、直觀,邏輯更加清晰。
- 一個storyboard講述一個故事,一個應用可以有很多故事線。如果項目前期規劃合理,那麼整個項目的脈絡會變得非常清晰,這比一大堆的文檔和代碼更有用。
- 可自由切換的程序入口。這個特性使得無論是調整業務或測試代碼都變得非常簡單,只需要拖動一下箭頭即可。
下面列舉一下上面答案提到的storyboard缺點的解決方案(僅作討論,不針對任何人):
- 衝突問題:storyboard一般只是用於展示頁面布局,布局不是個經常變動的東西,如果需要修改,修改的次數也非常的少。一般在團隊中專門約定幾名負責人專門修改頁面布局就可以了。如果真的需要很多人改,請拆分storyboard。
- 性能問題:性能的瓶頸真的在這裡嗎?有這些時間多多優化一下代碼,多使用非同步block的效果更為明顯吧。
- 大型項目的問題:大型項目中細分storyboard不僅可以解決打開卡頓的問題,也會使產品線更為直觀。
- 復用問題:storyboad的確不能復用,可復用的組件可以用NIB進行封裝,然後引入storyboad。
說了這麼多,還沒有直接的回答這個問題。軟體工程中沒有永恆不變的解決方案。在這裡也是一樣的,不要將思維局限在這3者之間,往往選擇更為合適的方案會事半功倍。下面簡單討論一下什麼情況下使用哪個。
什麼時候使用storyboard?- 組織多種view的層級關係,也就是傳說中的segue。
- 使用一些列表或表格單元的模板的時候。
- 除過不能使用storyboard的情況下盡量用storyboard。
什麼時候不建議使用storyboard?
- 動態或複雜布局,這時候可能需要用代碼來計算相關view的位置。
- 如果一個view已經用NIB或代碼實現
上面幾乎所有的文字都在描述storyboard,下面討論一下NIB(本人對nib/xib不太熟,有錯誤的地方歡迎指正)。
什麼時候使用nib?- 模態框(如登錄提示什麼的)
- 可復用視圖組件或模板
什麼時候不推薦使用nib?
- 有動態內容的視圖
- 不方便在IB中進行設計的試圖
然後說說代碼。
什麼時候使用代碼?- 動態布局
- 試圖特效
什麼時候不推薦使用代碼?
什麼時候使用代碼都是一個好方法,但不一定是最好的。以上個人開發的話建議使用Storyboard:
優點:
效率高;Auto Layout,做適配很方便;多語言很方便;靜態TableView,CollectionView極其方便;最重要的是直觀,結構清晰,一目了然!缺點:
不適合團隊開發使用;適合大號顯示器,尤其是iPad開發!很多人總是會說Storyboard載入時佔用多少多少資源,但其實經過這兩年的改進和優化,再加上硬體性能的提升,我認為這點完全沒必要操心了,畢竟Storyboard是Apple建議使用的方式,就像ARC剛出來時,各種大牛吐槽,但是現在ARC是默認的,新建工程的時候連取消的選項都沒有了。其實國外的公司很注重這些官方推薦的新技術,有幾次做國外的項目,客戶指明必須使用Storyboard,還有像Facebook iOS SDK的官方教程也是使用的Storyboard。
不過團隊開發的話Storyboard就不是很方便啦,還是XIB或者代碼比較適合!
作為開發者,尤其是做iOS還有Mac開發的,一定要優先掌握和使用Apple建議的技術,Apple所建議的一定是更簡單,更便捷,未來會持續推廣的技術,當然,這並不是功能最全最強大的技術,其實很多時候我們並不需要那麼強大的功能,舉個例子,我們需要顯示一個網頁,那麼我們直接使用一個WebView去載入就可以了,也許WebView的效率有點低,但是我們完全沒有任何必要去研究WebKit然後自己寫個瀏覽器去載入吧,況且自己寫的瀏覽器未必就比WebView強大。
扯的有點遠了,總而言之一句話,不管是Storyboard,XIB還是代碼的方式,沒必要一棵樹上弔死,選用最便捷的最適合項目的就可以了,比較大的項目最好組合使用!取決於你項目的規模, 參與人數和為哪裡工作
我長期為矽谷的Start up開發產品, Storyboard的優勢非常明顯, 因為一個產品一般只有一兩個人開發, 時間非常重要, Start up的需求經常會在開發中改變, 使用Storyboard能有效的減少開發周期,在需要更改的時候也非常直觀。有時候幾天就能做出一個各方面質量都挺高的小產品。
但是大的項目, 以及多人協作的項目Storyboard就有些麻煩了, 尤其是多人協作這裡, merge我覺得很麻煩, 盡量保證不同的人在不同的Storyboard下工作吧。還有代碼可以控制更複雜的載入, 另外app中需要一些動態頁面的時候, 也經常會混用代碼。
最後, 我剛開始開發ios的時候也沒有storyboard, 我覺得新技術出來的時候, 無論storyboard, arc, auto layout, modern objective-c, 等等, 不要偷懶也不要有一種對新技術抵觸的態度,也不要一味的拋棄以前的技術,因為每個新加入的技術都有他的優勢和缺點, 都了解,一起使用會讓你的project質量更高, 更容易維護, 也讓你的工作更輕鬆用過STORYBOARD,用過XIB,表示還是代碼構架GUI順手實際上主要是因為屏幕太小了,而且本人MACBOOK PRO常年沒有滑鼠,所以拖拽啥的非常不容易……加上當年寫JAVA GUI的時候也是這個尿性,所以就……
1. sb+autolayout已經是主流了。2. 不否認一些簡單的項目直接代碼更簡單一些,但是不夠直觀。
奇怪,我都是能用xib就用xib. storyboard倒是很少用,因為出來晚了,不習慣。剛開始看到答案中那麼多用代碼的,覺得很難理解;仔細想一下,明白了。對於美術人員來說,用xib很方便,自己割圖之後可以自己調整位置,直觀地看到效果;但是大部分美術人員根本就沒有mac, 也不喜歡、不會用mac,所以xib的這個優勢並不明顯。----------------不是每個團隊都打算去擁有這種對蘋果產品的感覺的,有很多項目只是為了做、為了混飯吃而做而已。我經歷的團隊是中國最大的某遊戲公司之下的一個小團隊。美術人員都只用windows, 對用mac沒有任何興趣。也能做,美術人員在ps裡面割圖,指定坐標,給程序員參考圖。所以,沒人需要調整xib, 沒人關心。
我喜歡直接用代碼寫,創建ViewController的時候不鉤xib,特別對於初學者,用代碼寫可以更好的了解控制項對象,而且自由度也比較大。但感覺stroyboard真的蠻強大,頁面之間的交互一目了然,segue把多MVC之間的交互表現得特別好也很方便,但是還是沒怎麼去嘗試這個iOS5的新東西
主要用xib,輔助以代碼
其實 xib 最麻煩的地方在於版本控制。xcode從4.4到4.5升完級,所有的 xib 都 modified還遇見過一個情況是一個人機器上改過的 xib,拿到別人的機器上打開xcode就自動修改了幾個屬性,被折磨死
這個問題提了3年多了
現在是2015-05-16 本人入行算1年吧,來答下這題
一開始我也是用xib比較多,畢竟拖拖控制項不僅速度快,看起來也很直觀.
但隨著iPhone6和plus的出現,在實際開發中,越來越感覺到xib的短板.在6之前,iPhone的橫向解析度只有320,屏幕尺寸的寬度和ppi也是固定的,所以無需考慮控制項和字體的大小對視覺的影響.現在,iPhone屏幕有4種尺寸,如果要針對不同屏幕進行調整,用xib的話會比較麻煩,如果用純代碼,可以在代碼中統一調整.但是代碼也有代碼的缺點,那就是不夠直觀,view的關係也不夠明晰,但是xcode自帶了UI分析工具,這都不是問題.綜上所述,雖然代碼在構建時雖然沒有xib快,但是在進行修改調整的時候,絕對要比xib快得多方便的多.因此,還是推薦使用代碼寫界面,成本更低.混用。大框架用storyboard做,一些小的細節用代碼編寫。
storyboard的一個問題是,當編寫universal的程序時,經常設置了iphone的忘了設置ipad的,用代碼就沒有這個問題。
暫時是代碼,內存可以自己控制到。(安心~~~)
除了動態布局部分,基本上都是用xib。代碼布局效率極其低下,用xib2分鐘能搞定,代碼要10分鐘以上。而且代碼不利於後期調整,一有改動就要重新看代碼,降低效率。Storyboard 從來不用,到現在都不知道怎麼用這個團隊開發,衝突問題如果有人知道解決方法敬請賜教。一個程序員如果能夠把最大的心思花在邏輯上,才能完成一個高質量的程序。界面方面能夠在最短時間,最高效率完成才是目標。
xib
storyboard蠻好的啊
我記得我當時是把xcode項目自動生成的xib文件都刪除掉的。。。