什么是库?

库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库。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. LINQ动态查询类--[DynamicLinqExpressions]

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.L ...

  2. oracle查询blob类型

    下午要查询一个数据,要求是从 表t_report 中查找出 mainbody字段中包含“hibernate”字符串的所有信息.而mainbody字段是blob类型.百度后终于找到答案: DBMS_LO ...

  3. 自定义ORM框架(转转)

    ORM背景 在数据库界,主流的数据库都是关系型数据库,其采用的关系型数据结构模型,无论从数学上还是实践中都相当的成熟,得到非常广泛的应用.在关系型数据结构理 论中,所有的数据都组织成一个个相互独立的二 ...

  4. 1.1HTML的基本概念

    1.WWW有3个基本的组成部分,分别是URL(统一资源定位器),HTTP(超文本传输协议),HTML(本文本标记语言). 2.一个HTML文件是由一系列的元素和标签组成的,元素不区分大小写. 3.&l ...

  5. Asp.net禁用页面缓存的方法

    方法1.在Asp页面首部<head>中添加如下代码 Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response ...

  6. 微星b85(b85i b85-gaming) 系列dsdt

    从网友得了一个b85-gaming 的dsdt,发现跟我的b85i的dsdt错误都是一样的. 发布上来给需要的人参考. 微星这个系列的dsdt不能用dsdt editor的fix功能,不然文件会越来越 ...

  7. 《EM-PLANT仿真技术教程》读书笔记(持续更新中)

    1.在系统分析过程中,必须考虑系统所处的环境,因此划分系统与环境的边界是系统分析的首要任务 2.模型可以分为物理模型和数学模型.数学模型可以分为解析模型.逻辑模型.网络模型以及仿真模型.模型可以分为离 ...

  8. PYTHONE的WHILE,BREAK,CONTINUE示例

    简短示例: while True: s = raw_input('Enter something : ') if s == 'quit': break if len(s) < 3: print ...

  9. 得到RTP包中的timestamp

    NTP------网络时间协议 PTP------精确时间协议 PTS,DTS的关系: http://www.cnblogs.com/qingquan/archive/2011/07/27/21189 ...

  10. API认证方法一览

    Open api authentication Amazon DigitalOcean Webchat Weibo QQ Amazon Web Services HMAC Hash Message A ...