ios 开发中 动态库 与静态库的区别

来源:互联网 发布:python 输出 编辑:程序博客网 时间:2024/05/18 18:54

使用静态库好处

1,模块化,分工合作

2,避免少量改动导致大量的重复编译连接

3也可以重用,注意不是共享使用


动态库使用有如下好处:

1使用动态库,可以将最终可执行文件体积缩小

2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源

3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。

从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小。

等其他好处,

从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开发中使用动态库就可以理解了:

因为在现在的iPhone,iPodTouch,iPad上面程序都是单进程的,也就是某一时刻只有一个进程在运行,那么你写个共享库,

----共享给谁?(你使用的时候只有你一个应用程序存在,其他的应该被挂起了,即便是可以同时多个进程运行,别人能使用你的共享库里的东西吗?你这个是给你自己的程序定制的。)

----目前苹果的AppStore不支持模块更新,无法更新某个单独文件(除非自己写一个更新机制:有自己的服务端放置最新动态库文件)

至于苹果为啥禁止ios开发使用动态库我就猜到上面俩原因


深入理解iPhone静态库

在实际的编程过程中,通常会把一些公用函数制成函数库,供其它程序使用,一则提高了代码的复用;二则提高了核心技术的保密程度。

所以在实际的项目开发中,经常会使用到函数库函数库分为静态库和动态库两种。和多数人所熟悉的动态语言和静态语言一样,这里的所谓静态和动态是相对编译期运行期的:

静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;

而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。

———————————     iPhone官方只支持静态库联编   ---------------------------------------------


静态库的替代 — framework(即 框架)

深入理解framework(框架,其实相当于静态框架,不是动态库)

打包framework还是一个比较重要的功能,可以用来做一下事情:

(1)封装功能模块,比如有比较成熟的功能模块封装成一个包,然后以后自己或其他同事用起来比较方便。

(2)封装项目,有时候会遇到这个情况,就是一家公司找了两个开发公司做两个项目,然后要求他们的项目中的一个嵌套进另一个项目,此时也可以把嵌套的项目打包成framework放进去,这样比较方便。


我们为什么需要框架(Framework)?

要想用一种开发者友好的方式共享库是很麻烦的。你不仅仅需要包含库本身,还要加入所有的头文件,资源等等。

苹果解决这个问题的方式是框架(framework)。基本上,这是含有固定结构并包含了引用该库时所必需的所有东西的文件夹。不幸的是,iOS禁止所有的动态库。同时,苹果也从Xcode      中移除了创建静态iOS框架的功能。

Xcode仍然可以支持创建框架的功能,重启这个功能,我们需要对Xcode做一些小小的改动。

把代码封装在静态框架是被app store所允许的。尽管形式不同,本质上它仍然是一种静态库。


框架(Framework)的类别

大部分框架都是动态链接库的形式。因为只有苹果才能在iOS设备上安装动态库,所以我们无法创建这种类型的框架。


静态链接库和动态库一样,只不过它是在编译时链接二进制代码,因此使用静态库不会有动态库(运行时载入)那样的问题(即除了苹果谁也不能在iOS上使用动态库)。
0 0