從事iOS開發(fā)兩年時(shí)間了,從最初只關(guān)心功能,到每次拿到設(shè)計(jì)原型,都要坐在一起討論每個(gè)細(xì)節(jié)的設(shè)計(jì)。
比如:這個(gè)模塊使用什么方式實(shí)現(xiàn)比較合適,這個(gè)參數(shù)是不是必須的,功能和展示必須要分開(進(jìn)度條和上傳進(jìn)度計(jì)算),固定的模塊是不是可以抽出來(lái)作為獨(dú)立的tagret,目標(biāo)是盡可能讓每個(gè)模塊都能穩(wěn)定,并在以后的每次快速迭代中,高效,可用,穩(wěn)定。
其實(shí)仔細(xì)坐下來(lái)想想,你會(huì)發(fā)現(xiàn)自己當(dāng)時(shí)拍一拍腦子覺(jué)得這很簡(jiǎn)單啊,不就是實(shí)現(xiàn)一個(gè)功能嘛。其實(shí)不然,要讓自己負(fù)責(zé)的模塊完美的供團(tuán)隊(duì)使用,要考慮的情況其實(shí)還是很多的。
給大家看一下目前項(xiàng)目的結(jié)構(gòu)示意圖:

之前七牛批量圖片上傳使用的是通知方式,因?yàn)楹芏鄷r(shí)候,不管是網(wǎng)絡(luò)請(qǐng)求還是圖片轉(zhuǎn)化,為了不影響主線程,一般都是采用異步線程去處理,所以不可能實(shí)時(shí)得到轉(zhuǎn)化的結(jié)果,那么怎么做呢?其實(shí)有三種做法:
@1 通知 Notification ,收到返回結(jié)果發(fā)送通知,進(jìn)行后續(xù)操作。
@2 信號(hào)量 因?yàn)槭钱惒降?,所以通過(guò)發(fā)送信號(hào)量的方式,在收到信號(hào)之后做后續(xù)操作。
@3 block block閉包的性質(zhì),讓我們可以舒服的時(shí)候其他類中的成員變量。
最后經(jīng)過(guò)再三決定還是使用block方式,主要原因還是在封裝的完善上考量的。使用前兩種當(dāng)然可以實(shí)現(xiàn),但是封裝性太差。使用block,我們可以讓block作為函數(shù)參數(shù)使用,獲取內(nèi)部封裝的進(jìn)度,返回結(jié)果等信息。
每種技術(shù)的選擇,都是有著意義的,我們?cè)谶x擇某種實(shí)現(xiàn)方式的時(shí)候,其實(shí)應(yīng)該更多的考量它對(duì)今后每個(gè)模塊的影響,而不僅僅是當(dāng)下。