什么是库?

库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库。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开发之静态库、动态库】的更多相关文章

  1. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  2. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  3. iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...

  4. 李洪强iOS开发之静态库的打包一

    李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...

  5. ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密

    JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...

  6. C++开发新版本vs使用旧版本vs编译的静态库动态库

    关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...

  7. iOS:iOS开发非常全的三方库、插件等等

    iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...

  8. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  9. iOS - swift 后使用打包动态库

    WWDC2014上发布的Xcode6 beta版有了不少更新,其中令我惊讶的一个是苹果在iOS上开放了动态库,在Xcode6 Beta版的更新文档中是这样描述的: Frameworks for iOS ...

随机推荐

  1. osgi与webservice

    osgi简介: http://osgia.com/ http://blog.csdn.net/xiaokui008/article/details/9662933 http://wdhdd889.it ...

  2. Objective-C 笔记一(HelloWorld)

    作为一个果粉And程序员,奔着对OC浓厚的兴趣,开始学习IOS.并以后也想从事IOS开发工作.并将自己的学习记录下来,俗话说的好,不会总结的程序猿,不是好程序员! Xcode可以在AppStore里下 ...

  3. 有用的前端demo

    js定时器循环切换字体和背景颜色<script type="text/javascript"> var flashId = 0; setInterval(functio ...

  4. angularjs中ng-attr的用法

    <!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...

  5. Java知识整理一

    文档二 密码:java

  6. 武汉科技大学ACM :1002: A+B for Input-Output Practice (II)

    Problem Description Your task is to Calculate a + b. Input Input contains an integer N in the first ...

  7. MySQL查询优化处理

    查询的生命周期的下一步是将一个sql转化成一个执行计划,MySQL再依照这个执行计划和存储引擎进行交互.这包括多个子阶段:解析sql,预处理,优化sql执行计划.这个过程中任何错误(例如语法错误)都可 ...

  8. HTML5 canvas 中的线条样式

    线条样式属性 lineCap        设置或返回线条的结束端点样式 butt         默认.向线条的每个末端添加平直的边缘. round         向线条的每个末端添加圆形线帽. ...

  9. 【结构型】Adapter模式

    Adapter模式主要意图是将类或接口转换成客户期望的接口,从而使得原本不兼容.无法在一起工作的接口可以在一起工作.该模式有两种形式的Adapter法,一是继承方式:二是对象关联依赖方式. 继承方式A ...

  10. twisted(3)--再谈twisted

    上一章,我们直接写了一个小例子来从整体讲述twisted运行的大致过程,今天我们首先深入一些概念,在逐渐明白这些概念以后,我们会修改昨天写的例子. 先看下面一张图: 这个系列的第一篇文章,我们已经为大 ...