ios静态库与动态库的区别

news/2024/7/20 20:15:53 标签: ios,

 一、什么是

是共享程序代码的方式,一般分为静态和动态

静态:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

三、iOS里静态形式?

.a和.framework

四、iOS里动态形式?

.dylib和.framework

五、framework为什么既是静态又是动态

系统的.framework是动态,我们自己建立的.framework是静态

六、a与.framework有什么区别?

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile =.framework

建议用.framework.

七、为什么要使用静态

方便共享代码,便于合理使用。

实现iOS程序的模块化。可以把固定的业务模块化成静态

和别人分享你的代码,但不想让别人看到你代码的实现。

开发第三方sdk的需要。

八、制作静态时的几点注意:

1注意理解:无论是.a静态还.framework静态,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用,而.framework本身已经包含了.h和其它文件,可以直接使用。

2图片资源的处理:两种静态,一般都是把图片文件单独的放在一个.bundle文件中,一般.bundle的名字和.a或.framework的名字相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。

3 category是我们实际开发项目中经常用到的,把category打成静态是没有问题的,但是在用这个静态的工程中,调用category中的方法时会有找不到该方法的运行时错误(selector notrecognized),解决办法是:在使用静态的工程中配置other linker flags的值为-ObjC。

4如果一个静态很复杂,需要暴露的.h比较多的话,就可以在静态的内部创建一个.h文件(一般这个.h文件的名字和静态的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

 



http://www.niftyadmin.cn/n/950667.html

相关文章

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

使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用…

米转换经纬度

在项目中,可能会有这样的需求,查找附近1公里的商店,或者咖啡馆,或者酒店等。而标识位置信息的是经度和纬度。 那手机定位可以得知自己的经度和纬度,那如何计算出附近1公里的精度和纬度范围呢。 计算方法如下&#xf…

GPS经纬度的表示方法及换算

GPS点坐标的表达方式有两种: dddmm.mmmm(度分格式):ddd表示度;mm.mmmm表示分,其中小数点前表示分的整数部分,小数点后表示分的小数部分; ddd.mm.ss(度.分.秒):ddd表示度…

经纬度互换和计算距离

经纬度互换 度(DDD):E 108.90593度 N 34.21630度 如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*6054.3558,取整数位54(分),0.3558*6021.348再取整数位21(秒),故转化为1…

mysql_cluster体系结构

MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项 服务也叫做一个节点,下面来介绍每个节点的功能。 The management (MGM) node 管理节点,用来实现整个集群的管理,理论上一般只启动一个…

mysql-cluster安装和部署

一>删除以前安装的内容 1 rpm -qa | grep mysql 2 find / -name mysql 3 重点是以前的数据文件和库文件/usr/local、/var/lib。 二>安装 yum install iptables-services -y yum install -y perl perl-devel yum remove mysql rm -rf /var/lib/mysql cp -f my.cnf …

NSLog的实现

最近接触IOS开发,使用NSLog,发现可以打印集合对象,让我不由的产生好奇,想了解一下其实现的原理。 书上说,是继承NSObject的类,然后需要重写description方法。 自己写了一个类,然后重写descrip…

protobuf 中的嵌套消息的使用 主要对set_allocated_和mutable_的使用

protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数调用了,下面看一…