形式:.a 和.framework
動態(tài)庫形式:.dylib和.framework
區(qū)分:
靜態(tài)庫:連接時會被完整復(fù)制到可執(zhí)行文件中辆童,被多次使用就浪費內(nèi)存
動態(tài)庫:連接時不復(fù)制直接由系統(tǒng)動態(tài)加載到內(nèi)存抒痒,只加載一次恰起,多個程序使用修械,節(jié)省內(nèi)存,but項目中使用自制的動態(tài)庫是不被允許上傳到AppStore
應(yīng)用:
1检盼、核心代碼封裝成一個靜態(tài)庫肯污,別人只需要知道怎么使用就可以
2、使用到第三方時吨枉,如果是個MRC的情況蹦渣,你可以直接將項目配合轉(zhuǎn)換成MRC,但是這樣出錯的幾率會提高貌亭。如果直接轉(zhuǎn)換成靜態(tài)庫就不需要管是MRC還是ARC
創(chuàng)建:
1>.a形式的靜態(tài)庫
有單獨的方式創(chuàng)建也可以直接在工程中創(chuàng)建柬唯,以下步驟在工程中直接創(chuàng)建:
第二步:
添加完成后,還是對工程運行或者編譯圃庭,會報錯锄奢,原因:還沒有引入庫
再次編譯,還是報錯剧腻,且報錯是包含x86-64等拘央,選中你的靜態(tài)庫對其進(jìn)行模擬器編譯,然后在將Debug改為NO
注意:如果你默認(rèn)創(chuàng)建的靜態(tài)庫.h和.m文件刪除再創(chuàng)建的話书在,那么就需要手動添加頭文件灰伟,否則沒有頭文件暴露出去,如圖所示這樣添加
補充:在靜態(tài)庫中添加圖片資源蕊温,創(chuàng)建一個.bundle文件夾袱箱,將其拖入到其中就可以,在使用的時候這樣調(diào)用:
NSString*path = [[NSBundlemainBundle]pathForResource:@"pic.png"ofType:nilinDirectory:@"myResource.bundle"];
UIImage*image = [UIImageimageWithContentsOfFile:path];
2>.framework形式下的靜態(tài)庫
同樣义矛,也可以單獨創(chuàng)建发笔,也可以工程中創(chuàng)建,一下是單獨創(chuàng)建的步驟:
第一步:如圖凉翻,創(chuàng)建后自己創(chuàng)建了一個Tool類了讨,然后將系統(tǒng)自己創(chuàng)建的.h和m文件刪除,再在如圖中所示制轰,找到headers將Project中的Tool.h移到Public前计,這樣就能暴露你的.h文件給別人使用
但是在這種情況下創(chuàng)建的framework系統(tǒng)默認(rèn)是動態(tài)庫,可以看到:所以選中static Library就可以了,再進(jìn)行編譯
第二步:使用垃杖,選中show in Finder男杈,將那個白色的盒子拖過去就可以使用
第三步:編譯發(fā)現(xiàn)報錯,有問題,只是拖入调俘,并未使用也報錯伶棒,在你的framework中的Debug改下NO旺垒,然后再刪除之前的重新拖入
補充:如果你一開始就是動態(tài)庫拖入的話,編譯報錯的時候也可可以直接引入他的二進(jìn)制文件肤无,如下圖:在其中添加即可