色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

iOS中Pod庫資源引用探究

Android編程精選 ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-05-26 11:11 ? 次閱讀

前言

Cocoapods中Pod引用資源的方式有多種,不同的方式對資源的使用還是有區(qū)別的,但也有一定的規(guī)律,這里我用一個樣例工程來進行說明,樣例工程名叫:AssetsDemo,使用pod lib create AssetsDemo命令創(chuàng)建,目錄結(jié)構(gòu)如圖:

b0dcbe7c-fb6a-11ed-90ce-dac502259ad0.jpg

這個pod很簡單,Classes目錄只有一個cell的swift和xib文件,Assets目錄有一些圖片資源,其中的TestTableViewCell.xib使用了這張test圖片。目錄結(jié)構(gòu)如下:

├──Assets
│├──Images.xcassets
││├──Contents.json
││└──test.imageset
││├──Contents.json
││├──test@2x.png
││└──test@3x.png
│├──test1@2x.png
│└──test1@3x.png
└──Classes
├──TestTableViewCell.swift
└──TestTableViewCell.xib

前期工作已經(jīng)準備完畢,下面說下xib和圖片資源不同使用方式下的區(qū)別:

將xib放入source_files,圖片放入resource_bundles

在podspec的寫法如下:

s.source_files='AssetsDemo/Classes/**/*'
s.resource_bundles={
'AssetsDemo'=>['AssetsDemo/{Assets,Classes}/**/*.{xcassets,png}']
}

運行后會生成這樣的framework:

b0e86088-fb6a-11ed-90ce-dac502259ad0.jpg

我們可以看到,xib后綴會變成nib,并被放入framework中,而圖片資源被放入了AssetsDemo.bundle中。

這樣的結(jié)構(gòu),顯然在常規(guī)情況下,xib是沒法找到圖片并顯示的。但是有一種有缺陷的用法可以勉強解決這個問題,那就是直接把png圖片打包到AssetsDemo.bundle中,然后在xib中將圖片名改為AssetsDemo.bundle/圖片名。這樣做會導致xib編輯時無法正確的顯示圖片,也沒法使用xcassets目錄來存儲圖片,并且會導致一些系統(tǒng)優(yōu)化無法生效。不推薦這樣使用。

將xib和圖片都放入resources

在podspec的寫法如下:

s.source_files='AssetsDemo/Classes/**/*.swift'
s.resources='AssetsDemo/{Assets,Classes}/**/*.{xcassets,png,xib}'

網(wǎng)上有說法使用resources來指定資源,被指定的資源只會簡單的被 copy到目標工程中(主工程),資源的使用會簡化,但是會與主工程同名資源文件產(chǎn)生沖突。但是在Xcode13和pod 1.11.2版本下,實測不是這樣的。官方的文檔也不是這樣說的Podspec Syntax Reference v1.11.2[1],它是分靜態(tài)庫和動態(tài)庫場景,靜態(tài)庫才有這類問題。

上述配置運行后會生成這樣的framework結(jié)構(gòu):

b0f23784-fb6a-11ed-90ce-dac502259ad0.jpg

從上圖可以看到,資源被直接放入了所在的framework,另外查看主工程的包文件,是沒有這些資源的。綜上所述,可以得出結(jié)論,動態(tài)庫中,resources指定的資源,會被直接copy到framework,不會與主工程資源文件沖突。

另外,由于xib文件TestTableViewCell.nib和Assets.car在同一個目錄下,xib可以直接從Assets.car中找到圖片資源并正確展示

在主工程中打開這個xib文件,如果主工程中有同名資源,那么編輯時會優(yōu)先顯示主工程的資源,但是實際運行時還是這個pod的資源。

這里xib可以放入source_files和resources,效果是一樣的

將xib和圖片都放入resource_bundles

在podspec的寫法如下:

s.source_files='AssetsDemo/Classes/**/*.swift'
s.resource_bundles={
'AssetsDemo'=>['AssetsDemo/{Assets,Classes}/**/*.{xcassets,png,xib}']
}

上述配置運行后會生成這樣的framework結(jié)構(gòu):

b0fa7fb6-fb6a-11ed-90ce-dac502259ad0.jpg

從上圖可以看到,xib文件TestTableViewCell.nib和Assets.car在同一個目錄下,xib可以直接從Assets.car中找到圖片資源并正確展示。其中,test1圖片雖然沒有以xcassets格式引入,但是也能直接找到并正確展示。

總結(jié)

綜上所述,我們可以得出一個原則:盡量讓xib和xcassets與圖片在同一個目錄下,這樣xib可以直接找到圖片并正常展示。

關(guān)于resources和resource_bundles,在動態(tài)庫下,他們最終效果差不多,只是resource_bundles會把資源封裝在bundle中,使用的時候會稍微麻煩一點:

//使用resources的情況:
letmyBundle=Bundle(for:TestTableViewCell.self)
tableView.register(UINib.init(nibName:"TestTableViewCell",bundle:myBundle),
forCellReuseIdentifier:"cell")

//使用resource_bundles的情況:
letmyBundle=Bundle(for:TestTableViewCell.self)
letpath=myBundle.path(forResource:"AssetsDemo",ofType:"bundle")!
letassetsBundle=Bundle.init(path:path)
tableView.register(UINib.init(nibName:"TestTableViewCell",bundle:assetsBundle),
forCellReuseIdentifier:"cell")

至于靜態(tài)庫,則推薦使用resource_bundles了。綜合來看,不管是靜態(tài)庫還是動態(tài)庫,都推薦使用resource_bundles來引入所有的資源,因為resources方式在靜態(tài)庫和動態(tài)庫場景,資源的使用方法差異太大,而resource_bundles各場景是一致的。

至于source_files,它只能引入代碼和xib文件,不支持引入圖片等其它資源。不建議用source_files方式引入xib,如果一定要使用,要注意避免出現(xiàn)xib中圖片無法加載的問題。

by: 掘金 - 星的天空

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    578

    瀏覽量

    25173
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    725

    瀏覽量

    22655
  • 靜態(tài)庫
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    7581
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3399

    瀏覽量

    152461
  • 資源
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    18102

原文標題:iOS 中 Pod 庫資源引用探究

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦
    熱點推薦

    使用GCC編譯STM32F1,makefile引用.a報錯的原因?

    使用STcube生成了一個基于GCC便于的工程且編譯完成。 現(xiàn)在想加入自己的.a文件,進行如下操作: 1)在main函數(shù)中加入.a的頭文件; 2)引用.a
    發(fā)表于 04-07 06:09

    請問怎么引用DSP 6747 RTS實時?

    您好 請問怎么引用DSP 6747 RTS實時?ti.targets.rts6000.ae674 這個是什么文件?RTS6740.lib 這個呢?到底怎么引用這種文件?然后 需要
    發(fā)表于 08-02 09:28

    iOS靜態(tài)和動態(tài)的區(qū)別

    iOS 靜態(tài)(靜態(tài)依賴、三方依賴、資源處理等)
    發(fā)表于 06-17 07:03

    大量的iOS開發(fā)資源匯總

    這里收集了大量的iOS開發(fā)資源,幾乎是網(wǎng)上最全的呢,包括大量的開發(fā)案例、接口以及類,分享給大家,希望大家喜歡。
    發(fā)表于 07-11 07:50

    Pod資源配置

    《Kubernetes進階實戰(zhàn)》第四章《管理Pod資源對象》
    發(fā)表于 10-22 14:39

    在OpenHarmony library如何引用本地har

    我在devstudio 的library引用本地har, build時報如下錯誤:Error:The HAR generated by the library project
    發(fā)表于 04-02 15:21

    在HarmonyOS模塊引用本地har包編譯報錯的解決措施

    問題現(xiàn)象在HarmonyOS模塊引用本地的har包,編譯時提示“HAR_DEPENDENCY_ERROR”錯誤信息,如下圖所示:解決措施HarmonyOS
    發(fā)表于 04-13 14:33

    iOS系統(tǒng)怎樣解決循環(huán)引用

    稍有常識的人都知道在 iOS 開發(fā)時,我們經(jīng)常會遇到循環(huán)引用的問題,比如兩個強指針相互引用,但是這種簡單的情況作為稍有經(jīng)驗的開發(fā)者都會輕松地查找出來。 但是遇到下面這樣的情況,如果只看其實現(xiàn)代碼,也
    發(fā)表于 09-26 10:07 ?0次下載
    <b class='flag-5'>iOS</b>系統(tǒng)<b class='flag-5'>中</b>怎樣解決循環(huán)<b class='flag-5'>引用</b>

    各類iOS項目中組織代碼的方法分析

    ://git.coding.net/xxx/specs.git# Coding等私有Git托管平臺 # iOS版本支持 # platform :ios, 7.0 # 開發(fā)的子項目 # pod
    發(fā)表于 09-26 11:38 ?0次下載

    一些非常有用的iOS開源

    的最好的用戶體驗。 用了這個,你只需要遵循一系列協(xié)議,iOS會優(yōu)雅地接管你的collection view并且會正確、好看地顯示給用戶信息。很明顯,每個iOS項目都應該采用。 CocoaPods:
    發(fā)表于 09-26 14:31 ?0次下載
    一些非常有用的<b class='flag-5'>iOS</b>開源<b class='flag-5'>庫</b>

    Kubernetes組件pod核心原理

    的 IP 地址和主機名 hostname,利用 namespace 進行資源隔離,相當于一臺獨立沙箱環(huán)境; pod 相當于一臺獨立主機,內(nèi)部可以封裝一個或多個容器(通常是一組相關(guān)的容器),內(nèi)部容器之間
    的頭像 發(fā)表于 09-02 09:27 ?2010次閱讀

    pod底層網(wǎng)絡和數(shù)據(jù)存儲是如何進行的

    的 IP 地址和主機名 hostname,利用 namespace 進行資源隔離,相當于一臺獨立沙箱環(huán)境; pod 相當于一臺獨立主機,內(nèi)部可以封裝一個或多個容器(通常是一組相關(guān)的容器),內(nèi)部容器之間
    的頭像 發(fā)表于 09-24 11:35 ?1856次閱讀

    KubernetesPod簡易理解

    Pod是Kubernetes中非常重要的概念,也是Kubernetes管理的基本單位。正如其名,Pod像一個豌豆莢,可以容納多個container,擁有相同的IP地址。
    的頭像 發(fā)表于 02-15 10:44 ?1451次閱讀

    K8S API資源對象-CRD介紹

    在Kubernetes,像Pod、Service和Deployment這樣的資源是由內(nèi)置的資源類型如Pod、Service和Deploym
    的頭像 發(fā)表于 08-08 10:21 ?1373次閱讀

    Pod是如何在底層實現(xiàn)的?如何使用Docker創(chuàng)建Pod

    剛開始接觸 Kubernetes 時,你學到的第一件事就是每個 Pod 都有一個唯一的 IP 和主機名,并且在同一個 Pod ,容器可以通過 localhost 相互通信。所以,顯而易見,一個
    的頭像 發(fā)表于 08-14 10:33 ?1517次閱讀
    <b class='flag-5'>Pod</b>是如何在底層實現(xiàn)的?如何使用Docker創(chuàng)建<b class='flag-5'>Pod</b>?
    主站蜘蛛池模板: 国产午夜伦鲁鲁 | 久久人人爽人人片AV人成 | 日韩在线 无码 精品 | 被公疯狂玩弄的漂亮人妻 | 青青国产在线观看视频 | 亚洲蜜桃AV永久无码精品放毛片 | 亚洲人成影院在线播放 | 在线观看成人免费 | 欧美牲交A欧美牲交VDO | 花蝴蝶免费版高清版 | 亚洲影院在线播放 | 麻豆出品国产AV在线观看 | 亚洲精品久久久午夜麻豆 | 日韩精品a在线视频 | 亚洲欧美日韩在线观看一区二区三区 | 久久婷婷五月综合色丁香花 | 美女快播第一网 | 国产精品高清在线观看地址 | 98国产精品人妻无码免费 | 国产av在线播放 | 欧美男女爱爱 | 久久久大香菇 | 国产99r视频精品免费观看 | 久久内在线视频精品mp4 | 相声flash| 99久久久免费精品免费 | 男人J放进女人屁股免费观看 | 三级黄视频 | 蜜臀AV精品一区二区三区 | 四虎视频最新视频在线观看 | 芳草地在线观看免费观看 | 被公疯狂玩弄的漂亮人妻 | 国产成人精品视频免费大全 | 香蕉59tv视频 | 少妇高潮惨叫久久久久久电影 | 亚洲国产在线99视频 | 国产欧美一区二区三区视频 | xxww69| 久久久黄色大片 | 富婆找黑人老外泻火在线播放 | 艳鉧动漫1~6全集观看在线 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品