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