日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS开发中与库相关的术语

發布時間:2025/5/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发中与库相关的术语 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態庫 VS 靜態庫

Static frameworks are linked at compile time. Dynamic frameworks are linked at runtime

?

?

?

.framework VS .a

.a?是一個純二進制文件,不能直接拿來使用,需要配合頭文件、資源文件一起使用。在iOS中是最為靜態庫的文件名后綴。

.framework 中除了二進制文件還有資源文件,可以拿來直接使用。

*在不能開發開發靜態庫的時候,.framework =.a+.h+hundle。 而當 Xcode 6 出來以后,我們可以開發動態庫后 .framework = 靜態庫/動態庫 + .h + bundle

?

.tbd VS .dylib & .a

.a 靜態庫的后綴名。

.dylib?動態庫的后綴名。

.tbd Xcode7后我們在導入系統動態庫是,不在有.dylib了,取而代之的是.tbd, 而 .tbd 其實是一個YAML本文文件,描述了需要鏈接的動態庫的信息。主要目的是為了減少app 的下載大小。

?

Embedded VS Linked(??)

Embedded frameworks are placed within an app’s sandbox and are only available to that app. System frameworks are stored at the system-level and are available to all apps.

  • OK,前面說了那么多,那么如果我們自己開發了一個動態framework 怎么把它復制到 dyld 的共享緩存 里面呢?
  • 一般來說,用正常的方式是不能滴,蘋果也不允許你這么做。(當然不排除一些搞逆向的大神通過一些 hack 手段達到目的)
  • 那么,我們應該如何開發并使用我們自己開發的 動態framework 呢?
  • 那就是 Embedded Binaries。
  • Embedded 的意思是嵌入,但是這個嵌入并不是嵌入 app 可執行文件,而是嵌入 app 的 bundle 文件。當一個 app 通過 Embedded 的方式嵌入一個 app 后,在打包之后解壓 ipa 可以在包內看到一個 framework 的文件夾,下面都是與這個應用相關的動態framework。在 Xcode 可以在這里設置,圖中紅色部分:

  • 那么問題又來了,下面的 linded feameworks and libraries 又是什么呢?
  • 首先在 linded feameworks and libraries 這個下面我們可以連接系統的動態庫、自己開發的靜態庫、自己開發的動態庫。對于這里的靜態庫而言,會在編譯鏈接階段連接到app可執行文件中,而對這里的動態庫而言,雖然不會鏈接到app可執行文件中,但是會在啟動的時候就去加載這里設置的所有動態庫。(ps.理論上應該是這樣,但是在我實際測試中似乎加載不加載都和這個沒關系。可能我的姿勢不對。?)
  • 如果你不想在啟動的時候加載動態庫,可以在 linded feameworks and libraries 刪除,并使用dlopen加載動態庫。(dlopen 不是私有 api。)

?

- (void)dlopenLoad{NSString *documentsPath = [NSString stringWithFormat:@"%@/Documents/Dylib.framework/Dylib",NSHomeDirectory()];[self dlopenLoadDylibWithPath:documentsPath]; }- (void)dlopenLoadDylibWithPath:(NSString *)path {libHandle = NULL;libHandle = dlopen([path cStringUsingEncoding:NSUTF8StringEncoding], RTLD_NOW);if (libHandle == NULL) {char *error = dlerror();NSLog(@"dlopen error: %s", error);} else {NSLog(@"dlopen load framework success.");} }

  

?

點擊build之后,Xcode做了什么

  • 預處理(Pre_process):把宏替換,刪除注釋,展開頭文件,生成 .i 文件
  • 編譯(Compliling):把之前的 .i文件轉換為匯編語言,產生 .s 文件
  • 匯編(Asembly):把匯編語言轉換為機器碼文件,產生 .o 文件
  • 鏈接(Link):對 .o 文件中的對于其他的庫的引用的地方進行引用,生成最后的可執行文件(同時也包括多個.o 文件進行鏈接)

  • LD && libtool

    ld:用于產生可執行文件

    libtool:產生lib的工具

    ?

    Build phases && Build rules && Nuild settings

    build phases:主要用來控制從源文件到可執行文件的整個過程,所以應該說是面向源文件的,包括編譯那些文件,一節編譯過程中執行哪些腳本的過程。

    build rules:主要是用來控制如何編譯某種類型的源文件,假如說對某種類型的文件進行特定的編譯,同時也會大量的運用一些Xcode中的環境變量。

    build settings:主要是對編譯工作的細節進行設定,在這個窗口可以看見大量的設置選項,從編譯到打包再到代碼簽名都有。

    ?

    Mach-O

    Mach-O:Match Object文件格式的縮寫,他是一種用于客執行文件、目標代碼、動態庫、內核轉儲的文件格式。作為a.out格式的替代,Mach-O提供了更強的擴展性,并提升了符號表中的信息訪問速度。

    ?

    關于內存五大分區

    • BSS段:

    BSS段( bss segment )通常是指用來存放程序中未初始化的全局變量和靜態變量 的一塊內存區域。

    這里注意一個問題:一般的書上都會說全局變量和靜態變量是會自動初始化的,那么哪來的未初始化的變量呢?變量的初始化可以分為顯示初始化和隱式初始化,全局變量和靜態變量如果程序員自己不初始化的話的確也會被初始化,那就是不管什么類型都初始化為0,這種沒有顯示初始化的就 是我們這里所說的未初始化。既然都是0那么就沒必要把每個0都存儲起來,從而節省磁盤空間,這是BSS的主要作用

    BSS是英文Block Started by Symbol的簡稱。BSS段屬于靜態內存分配。 BSS節不包含任何數據,只是簡單的維護開始和結束的地址,即總大小。以便內存區能在運行時分配并被有效地清零。BSS節在應用程序的二進制映象文件中并不存在,即不占用 磁盤空間 而只在運行的時候占用內存空間 ,所以如果全局變量和靜態變量未初始化那么其可執行文件要小很多。

    • 數據段(data segment)

    通常是指用來存放程序中已經初始化的全局變量和靜態變量的一塊內存區域。數據段屬于靜態內存分配,可以分為只讀數據段和讀寫數據段。字符串常量等,但一般都是放在只讀數據段中。

    • 代碼段(code segment/text segment)

    通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,并且內存區域通常屬于只讀, 某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量等,但一般都是放在只讀數據段中 。

    • 堆(heap)

    堆是用于存放進程運行中被動態分配的內存段,它的大小并不固定,可動態擴張或 縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張); 當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

    ?

    • 棧 (stack heap)

    棧又稱堆棧, 是用戶存放程序臨時創建的局部變量,也就是說我們函數括弧“{}” 中定義的變量(但不包括static聲明的變量,static意味著在數據段中存放變量)。除此以外, 在函數被調用時,其參數也會被壓入發起調用的進程棧中,并且待到調用結束后,函數的返回值 也會被存放回棧中。由于棧的后進先出特點,所以 棧特別方便用來保存/恢復調用現場。從這個意義上講,我們可以把堆棧看成一個寄存、交換臨時數據的內存區。


    小 Tips

    • 棧區中的變量不需要程序員管理
    • 堆區的需要程序員管理
    • 在 iOS 中堆區的內存是所有應用程序共享
    • 系統使用表級別結構來分配內存空間,所以邏輯地址和物理地址可能不一樣

    ?

    筆記來源:https://github.com/Damonvvong/DevNotes/blob/master/Notes/framework2.md

    轉載于:https://www.cnblogs.com/mapanguan/p/9197982.html

    總結

    以上是生活随笔為你收集整理的iOS开发中与库相关的术语的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91av观看| 久久久亚洲综合 | 国产人妖视频 | 国产一区在线不卡 | 黄色成人av | 国产xxx在线 | 在线观看免费日韩av | 免费毛片一区二区三区 | 国产精品久久久久久久免费看 | 五月婷婷视频在线观看 | 一区二区在线播放视频 | 呦女精品| 天天天天干 | 国产无套内射又大又猛又粗又爽 | 午夜影院18 | 亚洲狼人在线 | 日韩一二三四区 | 亚洲精品在线中文字幕 | 午夜一区不卡 | 色噜噜狠狠狠综合曰曰曰 | 国产高清sp | 国产日韩欧美精品一区二区 | 国产一级淫 | 亚洲av综合色区无码一二三区 | 国产人妖一区二区 | 半推半就一ⅹ99av | 黄色无毒网站 | 五月婷婷六月色 | 少妇精品在线 | 久久黄页 | av涩涩 | 国产一二三 | 在线免费亚洲 | 亚洲精品久久久久久国产精华液 | 久久av无码精品人妻系列试探 | 让男按摩师摸好爽 | 理论片中文 | 很黄很污的视频网站 | 亚洲美免无码中文字幕在线 | 91精品国产麻豆国产自产在线 | 视频二区在线观看 | 欧洲精品在线播放 | av视屏 | 免费又黄又爽又猛大片午夜 | 可以免费观看的毛片 | 97人人人| 国产99视频在线 | 91精品毛片| 国产精品九九九 | 色哟哟无码精品一区二区三区 | 狠狠插综合 | 91视频免费入口 | 天天操天天操天天操天天操天天操 | 久久久久久久久久久电影 | 国产欧美一区二区在线 | 911国产在线 | 日韩av有码| 播金莲一级淫片aaaaaaa | 久久艹中文字幕 | 一区二区日韩视频 | 最近最经典中文mv字幕 | 女女互慰揉小黄文 | 九九热最新 | 日韩欧美激情视频 | 五十路av在线 | 国产精品人人人人 | 巨胸挤奶视频www网站 | 狂野欧美性猛交xxⅹ李丽珍 | 91伊人久久 | 啪啪视屏| 伊人久久超碰 | 色综合久久久久 | 男人天堂网址 | 又黄又爽的视频在线观看 | 青青草狠狠干 | 免费看片色 | 国产主播福利在线 | 任你躁av一区二区三区 | 亚洲最大的黄色网 | 欧美一级黄色片子 | 国产草草视频 | 久久99国产视频 | 美色视频 | 美女啪啪无遮挡 | 鲁鲁狠狠狠7777一区二区 | 中文字幕人妻丝袜乱一区三区 | 成人免费xxxxxx视频 | 波多野结衣在线电影 | 国产精品一亚洲av日韩av欧 | 激情午夜av | 天天干夜夜艹 | 性高潮久久久久久久 | 毛片av网站 | 久久久久久久亚洲av无码 | 女生扒开尿口 | 91麻豆精品国产午夜天堂 | 日本亚洲欧美在线 | 成人av在线播放网站 | 精品日韩一区二区三区 |