【iOS开发之静态库、动态库】
什么是库?
库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库。github中共享一般是开源库;闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一般用于保护不开源的核心代码。
还可以将MRC的代码打包成静态库,运行在ARC的环境下。
静态库
静态库一般以.a和.framework结尾,静态库在链接时, 会被完整的复制到可执行文件中; 被多次使用, 就有多份拷贝;
静态库一般用于保护自己核心代码,国内的企业,掌握核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用,如支付宝,百度地图等
静态库一般是.h和.a来结合使用,.h来暴露方法名供用户使用,.a来屏蔽具体实现。
静态库的制作
制作.a的静态库
1、打开xcode,如下图创建静态库项目。

2.设置编译静态库适用所有架构的模拟器,Build Settings -> Build Active -> NO,设置后编译生成的库使用所有模拟器。

3.选取要暴露出去的头文件,在target->Build Phases->Copy Files将要暴露的头文件加进来

4.选择模拟器(此处可随意选择,因为第2步已经设为NO,可适用于任何模拟器),然后编译项目,编译完成后左下角的.a文件由红色变为白色,即表示已经生成了静态库。如果是要在真机上使用,就要选择真机进行编译。

5.右击.a文件选择"show file in finder",在finder中找到.a文件(此处有连个文件夹,一个是simulator用于模拟器,一个是iphoneos用于真机)。include中是第3步设置的头文件,需要用时将此处.a文件和include中的.h文件拷贝到要使用静态库的项目中即可使用。

6.一般默认情况下,编译出来的都是在debug模式下使用的库,如果想制作发布阶段使用的库,可以选择edit schema->run->biuld configuration中的release版本,再编译项目,即可生成release版本的静态库。(release版本的静态库比debug的静态库略小,并去掉了很多调试用的字符)



制作.framwork的静态库
1.新建项目选.framwork的库

2.设置编译所有架构的库

3.设置要暴露的头文件(此处和.a不同),要将project栏目的头文件拖动至pubic栏目中,表示该文件可以共用。

4.最后一步,设置编译后的库是静态的,target -> Build Settings-> 搜索 Mach-o Type改为静态库。如果不设置此项默认将生成动态库。

5.使用时只需要将.framework赋值到项目中即可。
.a的静态库和.framwork的区别:
1> .a是一个纯二进制文件, .framework中除了有二进制文件之外还有资源文件
2> .a文件不能直接使用, 至少要有.h文件的配合; .framework文件可以直接使用
3> .a + .h + sourceFile = .framework
4> 建议使用.framework
注意点:
1.如果在制作静态库时,需要添加很多图片素材,此时为了防止图片资源和使用者项目中的图片资源同名等冲突,可以在库中创建一个.bundle的资源包,将图片放入到这个包中。
2.暴露头文件过多时,可以写一个主头文件,将其他头文件都加入到主头文件,再将主头文件暴露出来。
3.在静态库制作时,想调试静态库,但又由于静态库不是正在的可运行的工程,所以没法调试。这是可以新建一个标准的ios工程,然后在该工程中再添加一个静态库工程,并将静态库添加到标准工程中,添加依赖即可调试。


动态库
动态库一般以.dylib和.framework结尾,动态库则不会复制, 只有一份. 程序运行时动态加载到内存; 系统只加载一次, 多个程序共用, 节省内存; 但是项目中如果使用到自己的动态库, 不允许上架!
制作步骤同静态库生成.framework一致,只是不需要第4步。
使用时需要在Embedded Binaries中添加导入的库才能使用
常见的报错和处理办法:
参考这篇文章
https://my.oschina.net/ioslighter/blog/363211
【iOS开发之静态库、动态库】的更多相关文章
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...
- 李洪强iOS开发之静态库的打包一
李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...
- ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密
JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...
- C++开发新版本vs使用旧版本vs编译的静态库动态库
关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...
- iOS:iOS开发非常全的三方库、插件等等
iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...
- C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项
目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...
- iOS - swift 后使用打包动态库
WWDC2014上发布的Xcode6 beta版有了不少更新,其中令我惊讶的一个是苹果在iOS上开放了动态库,在Xcode6 Beta版的更新文档中是这样描述的: Frameworks for iOS ...
随机推荐
- telnet与tnsping
在cmd 下面 tnsping ZCGL ZCGL这个是在oracle做好的数据库连接. telnet IP地址 加上端口号. 查看视图的编写语句 select dbms_metadata.get_d ...
- Ubuntu11.10与r8168网卡不兼容导致网络时断时续的问题
安装了ubuntu11.10之后,感觉上网啥的很不稳定,ssh连接内网机器也是一条命令卡半天,检查了各方面的原因,网络没有什么问题,最后才发现是网卡驱动的问题,网上搜了一下是由于linux(ubunt ...
- 《Linux内核分析》week1作业-分析一个简单c语言的汇编代码
1.C语言源码 #include <stdio.h> int g(int x){ ; } int f(int x){ return g(x); } int main(){ )+; } 2. ...
- phplib template说明
phplib template phplib有五大功能:将数据库驱动和对数据库操作完全分离:支持session:权限许可:模板:购物 车 说明:1.第一个简单的模板页first.html模板中的{ma ...
- dede仿站笔记
仿站步骤查看是否为dedecms的方法,看引用路径src="/templets/default2012/images/toutiao.png" 0查看仿站编码,选择utf8或gbk ...
- php 魔术方法 __autoload()
PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义在同一个类 ...
- OpenStack JEOS 镜像
JEOS:Just Enough Operating System 维基百科地址:http://en.wikipedia.org/wiki/Just_enough_operating_system O ...
- Git之detached HEAD
今天遇到了和CSDN上博主相同的问题,就是使用git -branch -a 发现自己处于一个零时的分支上.这篇博文写的不错,转载记录一下. 转载:http://blog.csdn.net/lili62 ...
- 用法总结:NSArray,NSSet,NSDictionary-备用
Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合 (集合)NS ...
- Head First --- Python 第一章
List 1. python -V 查看python当前版本 2. list.pop() 删除列表里的最后一个元素,并返回删除元素的值 3. list.extend(['a','b','c']) 在原 ...