欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

iOS中怎么避免組件依賴沖突

這篇文章給大家介紹iOS中怎么避免組件依賴沖突,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)安丘免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

嚴格的版本限制

一個開源組件的迭代過程中,保證上層接口的向下兼容就不錯了。為了優(yōu)化性能并且控制內(nèi)存,YBImageBrowser 沒有直接用其最上層的接口,而是單獨使用了下載模塊和緩存模塊,SDWebImage 的迭代升級很容易導(dǎo)致筆者的組件兼容不了,所以之前一直是類似這樣依賴的:

s.dependency 'SDWebImage', '~> 5.0.0'

這樣做的好處是限制足夠小版本范圍,降低 SDWebImage 接口變動導(dǎo)致組件代碼錯誤的風(fēng)險。但如果 SDWebImage 升級到 5.1.0,不管相關(guān) API 是否變動,CocoaPods 都視為依賴沖突。

其它組件依賴了不同版本的 SDWebImage

當(dāng)兩個組件依賴了同一個組件的不同版本,并且依賴的版本沒有交集,比如:

A.dependency 'SDWebImage', '~> 4.0.0'
B.dependency 'SDWebImage', '~> 5.0.0'

那么 A 和 B 同時集成進項目會出現(xiàn)依賴沖突。

解決方案

使用 CocoaPods 集成項目非常便捷,對于組件使用者來說,總是想在任何場景下都能輕易集成,并且能在將來享受組件的更新優(yōu)化,顯然前面提到的問題可能會影響集成的便捷性。

更模糊的版本限制

很多時候一個大版本的組件不會改動 API,并且對于社區(qū)流行的組件我們可以寄一定希望于其做好向下兼容,所以放寬依賴的版本限制能覆蓋將來更多的版本(規(guī)則參考:podspec dependency[2]):

s.dependency 'SDWebImage', '>= 5.0.0'

為什么不干脆去掉版本限制呢?

因為 YBImageBrowser 3.x 是基于 SDWebImage 5.0.0 開發(fā)的,筆者可以明確不兼容 5.0.0 之前的版本,所以在 SDWebImage 將來迭代版本出現(xiàn)相關(guān) API 不兼容之前,這個限制都是“完美”覆蓋所有版本的。

避免依賴沖突的暴力方案

當(dāng)有其它組件依賴了不同版本的 SDWebImage,粗暴的解決方案如下:

? 直接修改其它組件依賴的 SDWebImage 版本。

? 將 YBImageBrowser 手動導(dǎo)入項目,并且修改代碼去適應(yīng)當(dāng)前的 SDWebImage 版本。

? 社區(qū)朋友一個 Issue 中提到的方法:在 ~/.cocoapods/repos 目錄下找到 YBImageBrowser 文件夾,更改對應(yīng)版本的 podspec.json 文件里對 SDWebImage 的依賴版本。

顯然,上面的幾種方案不太優(yōu)雅,手動導(dǎo)入項目難以享受組件的更新優(yōu)化,修改本地 repo 信息會因為 repo 列表的更新而復(fù)位。

避免依賴沖突的優(yōu)雅方案

出現(xiàn)依賴沖突是必須要解決的問題,其它組件依賴的版本限制可以視為不變量,解決方案可以從組件的制作方面考慮。

要做到的目標是,既滿足部分用戶快速集成組件,又能讓部分用戶解決依賴沖突的前提下保證能享受組件將來的更新優(yōu)化。

答案就是subspec,以下是 YBImageBrowser.podspec 部分代碼(完整代碼[3]):

s.subspec "Core" do |core|
core.source_files = "YBImageBrowser/**/*.{h,m}"
core.dependency 'SDWebImage', '>= 5.0.0'
end
s.subspec "NOSD" do |core|
core.source_files = "YBImageBrowser/**/*.{h,m}"
core.exclude_files = "YBImageBrowser/WebImageMediator/YBIBDefaultWebImageMediator.{h,m}"
end

由此,用戶可以自由的選擇是否需要依賴 SDWebImage,在 Podfile 里的觀感大致是這樣:

// 依賴 SDWebImage
pod 'YBImageBrowser' 
// 不依賴 SDWebImage
pod 'YBImageBrowser/NOSD'

那么在 YBImageBrowser 代碼中應(yīng)該如何區(qū)分是否依賴了 SDWebImage 并且提供默認實現(xiàn)呢?

第一步是設(shè)計一個抽象接口(這個接口不依賴 SDWebImage):

@protocol YBIBWebImageMediator <NSObject>
// Download methode, caching methode, and so on.
@end

第二步是在YBImageBrowser.h中定義一個遵循該接口的屬性:

/// 圖片下載緩存相關(guān)的中介者(賦值可自定義)
@property (nonatomic, strong) id<YBIBWebImageMediator> webImageMediator;

第三步是實現(xiàn)一個默認的中介者(這個類依賴了 SDWebImage):

@interface YBIBDefaultWebImageMediator : NSObject <YBIBWebImageMediator>
@end
@implementation YBIBDefaultWebImageMediator
//通過 SDWebImage 的 API 實現(xiàn) <YBIBWebImageMediator> 協(xié)議方法
@end

第四步是在內(nèi)部代碼中通過條件編譯導(dǎo)入并初始化默認中介者:

#if __has_include("YBIBDefaultWebImageMediator.h")
#import "YBIBDefaultWebImageMediator.h"
#endif
...
#if __has_include("YBIBDefaultWebImageMediator.h")
_webImageMediator = [YBIBDefaultWebImageMediator new];
#endif

第五步在 YBImageBrowser.podspec 中也可以看到,在不依賴 SDWebImage 的集成方式時排除了兩個文件:YBIBDefaultWebImageMediator.{h.m}。

由此便實現(xiàn)了目標:

? 用依賴 SDWebImage 的集成方式快速集成。

? 使用不依賴 SDWebImage 的集成方式避免各種情況下的依賴沖突,但注意這種情況需要自行實現(xiàn)一個遵循<YBIBWebImageMediator>協(xié)議的中介者。

關(guān)于iOS中怎么避免組件依賴沖突就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:iOS中怎么避免組件依賴沖突
文章路徑:http://aaarwkj.com/article12/ipdjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、動態(tài)網(wǎng)站、小程序開發(fā)外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)
国产伦理自拍视频在线观看| 81精品国产综合久久精品伦理| 视频一区二区日韩不卡| 色播婷婷午夜激情福利| 日本一区欧美二区精品| 亚洲第一区二区国产精品| 亚州欧美制服另类国产| 播放欧美日韩特黄大片| 亚洲精品网址一区二区| 欧美乱与老熟妇视频观看| 国产白丝诱惑在线视频| 日本大片在线一区二区三区| 丰满少妇一区二区三区专区| 欧美性大片免费在线观看| 亚洲欧美另类不卡专区| 国产成人精品无人区一区| 九九视频666免费| 精品国产91久久粉嫩| 中文字幕人妻日韩在线| 日本午夜福利视频在线观看| 精品中文字幕欧美区一区| 日本欧美国产污黄在线观看| 久久综合伊人欧美精品| 亚洲毛片在线免费播放| 剧情av一区二区在线| 18岁未成年禁止观看视频| 91国产自拍在线视频| dy888午夜福利精品国产97| 亚洲精品中文字幕码专区| 日韩av在线播放亚洲天堂| 成人黄色免费在线网站| 国产又粗又长又猛又爽视频| 18禁免费无遮挡免费视频| 91av国产一区二区| 一不卡二不卡三不卡日本影院| 亚洲av成人精品日韩一区麻豆| 亚洲 综合 久久久| 国产亚洲精品久在线| 一区中文字幕人妻少妇| 欧美精品色精品免费观看| 国产毛片精品一区内射|