静态库和动态库

静态库和动态库的存在形式
静态库: .a 和 .framework

动态库: .dylib 和 .framework

静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝

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

制作 .a

新建项目-> 选择 “Cocoa Touch Static Library”

就在.h文件中,写入功能函数!简单的直接写入1个方法,并实现方法,例子是把输入的字符串打印两边

#import <Foundation/Foundation.h>

@interface MyStaticLibraryDM : NSObject

//将输入的字符串打印两边
-(void)printMyInput:(NSString*)inputString; @end
#import "MyStaticLibraryDM.h"

@implementation MyStaticLibraryDM

-(void)printMyInput:(NSString*)inputString{

    NSLog(@"inputString === %@ twice is ==== %@",inputString,inputString);
} @end

然后,调试代码无误后,就可以进行编译了

编译静态库

注意:需要修改Build Settings中的 Build Active Architecture Only 以满足运行不同CPU环境的模拟器。 将此设置为NO。

在不同编译环境下编译会生成四种静态库,debug模拟器,debug真机,release模拟器,release真机,我们需要将运行环境调至不同的状态并生成如上四种形式的静态库。这里只以一种情况为例:
设置是Debug还是release
选择Edit Scheme--> Buid Configuration设置为release
设置模拟器还是真机
就是设置模拟器还是真机,因为之前我们将只编译当前环境设置为NO,所以编译出来的静态库会支持各种CPU环境。

最后按住 command+b 编译!

你会发现你的静态库文件从红色变成了黑色,这就是编译完成了啊。可以 show in finder 查看文件所在位置。

上面是我在不同环境运行之后的结果

Debug-iphoneos 文件夹里面的东西是用在真机上的
Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的

其他是在Release模式环境生成的

如果想让一个 .a 文件能同时用在真机和模拟器上,需要进行合并
在终端输入指令

lipo -create 静态库1 静态库2 -output 新静态库名称.a
localhost:~ micaimanong$ cd /Users/micaimanong/Library/Developer/Xcode/DerivedData/MyStaticLibraryDM-fczwjaefnkvdmjelggxccgpicgwy/Build/Products 
localhost:Products micaimanong$ lipo -create Debug-iphoneos/libMyStaticLibraryDM.a Debug-iphonesimulator/libMyStaticLibraryDM.a -output libMyStaticLibraryDM.a

先进入products 在将其中的两个合并 合并之后生成一个新的.a文件

如下图所示 libMyStaticLibraryDM.a 支持模拟器和真机

最后就是引用了

在你的要使用太静态库的项目中导入libMyStaticLibraryDM.a文件和include文件夹中的相应的所有.h头文件。
 
例如,我要在MyLibraryTest项目中,使用我上述编译好的静态库文件。
 
导入完成后,项目如下:
 

之后引用文件并实现方法

打印如下 将输入的字符串打印了两边

如果遇到下面的问题

原因是你导入错误的编译版本。
以上错误,是你的库文件(.a)为真机版本,你却用模拟器来调试程序。将调试目标换成真机,或者使用合并之后的(.a)文件也可以解决。

操作时会遇到很多问题,具体问题具体对待。

iOS开发之静态库.a 以及合并的更多相关文章

  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开发之静态库(四)—— 静态框架framework制作

    前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + ...

  6. 【转】 iOS 开发之静态库.a和动态库详解 -- 不错

    原文网址:http://blog.csdn.net/lxl_815520/article/details/52154331 一, 简单介绍 1.什么是库 库是程序代码的集合,是共享程序代码的一种方式 ...

  7. 李洪强iOS开发之静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  8. iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> Ne ...

  9. iOS开发之静态库(二)—— .a

    前面已经介绍了iOS中静态库的基本概念和特点,这里就不再多废话,直接上代码 编译环境Xcode5.1 + Mac OS X 10.9.3 新建静态库项目 Xcode中创建静态库的模板有两个,一个是创建 ...

随机推荐

  1. java.util.regex.PatternSyntaxException, dangling metacharacter “?” 解决方法

    今天在用正则表达式的时候遇到这样一个异常 看了相关资料后发现这是因为在正则表达式中,像"?","*","\"都是保留字符,所以在用的时候需要 ...

  2. spring4-5-事务管理

    1.简单介绍 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的完整性和一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的 ...

  3. 关于防SQL注入敏感词过滤问题

    关于对字符的过滤问题sql查询条件过滤掉单引号是否就安全了呢? 在文章最后一段管理员做了敏感字符的过滤,管理员过滤掉了空格,而攻击者通过 /**/ 来代替空格绕过了过滤字符.感觉很有成就感,呵呵呵呵. ...

  4. Python之FTP传输-乾颐堂

    访问FTP,无非两件事情:upload和download,最近在项目中需要从ftp下载大量文件,然后我就试着去实验自己的ftp操作类,如下(PS:此段有问题,别复制使用,可以参考去试验自己的ftp类! ...

  5. json操作工具-LitJson

    LitJSON是json生成与读取的操作工具,使用很方便并且网上还能找到源码.下面是使用LitJSON的例子: 一.生成json:实例化一个JsonData,然后按照List数组的方式向里面填. Js ...

  6. combotree 满足条件的节点不可选中

    combotree: $("#Parent").treegrid("unselect");

  7. 在linux下使用CMake构建应用程序

    本文介绍了一个跨平台的自动化构建系统 CMake 在 linux 上的使用方法. CMake 是一个比 automake 更加容易使用的工具,能够使程序员从复杂的编译连接过程中解脱出来.文中通过一些例 ...

  8. JSTL详解实例

    JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的.在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定 ...

  9. jstl中的日期格式化

    <% String strdate="2004/04/01";   Date a=new Date(strdate);   request.setAttribute(&quo ...

  10. kcp源码走读

    kcp协议与tcp协议类似,是一种ARQ协议.他的优点在于比tcp的延迟更小30%-40%,但相应的会牺牲一部分的带宽,大该比tcp多浪费10%~20%.tcp的设计目标是增大网络利用率,而kcp的设 ...