引言
"一天一點愛戀,一夜一點思念~~",這是梁朝偉的一首歌,講解xib用這個標題,主要是個人比較喜歡梁朝偉演的電影,而且這首歌也算是經典,但最重要原因是很多程序員對xib并沒有"愛戀",這部分一共九篇文章,就是為了幫助廣大程序員對xib產生"愛戀"與"思念"。(文中的xib也包括storyboard,后面專門提高storyboard的地方統一簡寫為SB)
xib優缺點分析
以下是我總結的xib的優缺點,這個問題其實很主觀,沒有絕對,個人觀點,僅供參考。
缺點
1.有一定的學習成本
2.沒有代碼表達清晰
3.出錯不易發現,無法調試,尤其是“連線”出了問題
4.文件易沖突,且難解決,不利于團隊合作,尤其是在團隊中用SB
5.執行效率沒有代碼高
6.有時不利于封裝
優點
1.開發效率高
2.減少大量膠水代碼
3.通過xib可以快速、高效的學習控件
4.適配性明顯優于代碼(auto layout、size classes)
5.能做的事情比你想象中的要多
優缺點的一些個人看法
個人認為:
有學習成本的事情,要看值不值得去做,而xib絕對是值得去做的,因為xib對效率提升幫助相當巨大,是大勢所趨,因為無論是iOS開發還是Mac OS X開發,都沒有像Android那樣豐富的布局概念的引入,如果沒有xib,還停留在手寫UI的時代,可以說UI開發上Android完爆iOS,但如果用xib進行UI開發,則iOS的優勢更大。
2015 WWDC session 215——What's New in Storyboard中,蘋果的演講嘉賓現場統計用xib開發人數的占比已經很高了。我個人對學習新東西一直充滿熱情,雖然有時淺嘗輒止,但:
我心中那團火是不會熄滅滴(少林足球,周星馳)
做技術就是要不斷學習,要享受這個過程。
xib的確有時不如代碼表達清晰,尤其是“連線”很多的時候,但是如果你對xib很熟悉,看別人的xib遠比看別人的代碼效率要高很多。
xib有時候出錯是不容易被發現,尤其是在對xib掌握不是很好的情況下,多連一條線、少連一條線的錯誤很難看出來。
xib文件產生的沖突其實很容易被解決,一天一點xib:3先學會解決文件沖突中有詳細說明。
xib執行效率的確沒有代碼效率高,因為加載要多一步——把xib文件加載到內存中,當年我在iOS4上用iPad一代開發的時候,就有明顯感覺——一個頁面xib文件過多(當時用xib做表單提交數據,大概有60、70個控件)加載速度變慢(當時延時1、2s),但是就現在的硬件水平和一般的需求來說,這絕對不是瓶頸。
xib的確有時會使得對象難以封裝,但是如果用了xib你會發現有些封裝也不是必要的了,因為xib如此方便,拷貝一個xib出來改改就是了。其實如果你對xib掌握及其熟練、對封裝理解很好的話,其實xib有時會提高封裝性,舉個簡單的例子:比如現在有個基類叫BrandView,BrandView有個logo的屬性,這個屬性是UIView的實例,根據不同的品牌展現不同樣式的logo,BenzBrandView和BMWBrandView都繼承自BrandView,且都是用xib來管理UI的,那么我們就可以在基類中聲明:
@property (nonatomic, strong) IBOutlet UILabel *brandLabel;
而在子類的xib文件中分別與基類的這個IBOutlet屬性“連線”,這樣既將屬性“抽”到了基類中,又不用基類寫創建的代碼,就是說基類可以利用子類的xib文件與自己做關聯從而避免了創建UI的代碼,同時又能實現很好的封裝。
優點方面:不需要繁瑣地、千篇一律地創建對象、布局對象,也不再使用代碼給屬性賦值。SB還會省去很多頁面跳轉之間的膠水代碼(segue),甚至不用寫代碼就能實現在各個頁面中切換,tableView的cell可以直接拖到tableView里,可以給tableView添加header、footer,可以添加手勢、設置代理、size classes使得適配變得更加容易、xib也使得國際化變得很容易、可以通過代碼給xib動態加入屬性...這些東西,有些根本不用寫代碼,有些只需寫極少量代碼就能實現。
總結
歡迎大家和我一起走進xib的世界,共同學習、共同成長。
歡迎大家和我交流溝通,若文章中有錯誤和紕漏,懇請指正,謝謝。