静态库

1.静态库和动态库的区别

静态库(包括.a和.framework文件),链接时,静态库会被完整地复制到可执行文件中,如果被多次使用就会有多次冗余拷贝

动态库(包括.dylib和.framework文件),链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,可供多个程序公用,节省内存,

看起来好像是动态库比较好,但是苹果官方规定,如果项目中使用了自制的动态库,就不允许上传AppStore

2.静态库一般的用途

1)核心技术不希望对外开放

2)把MRC打包成.a文件,用于ARC项目

3.制作静态库

1)xcode-->File --> new --> project --> Framework & Library --> Cocoa Touch Static Library (名字中不要出现中文,否则会有奇怪的问题)

2)直接 command + B 编译,生成红色的.a文件。再选择 iOS Device 编译,就可以生成对应的文件了

4.静态库中需要暴露给外界的.h文件

targets --> Build Phases --> Copy Files --> 选中需要添加的.h文件,之后重新编译静态库即可

5.问题

1)如果是使用某个模拟器编译的.a文件,之后用于真机或者其他模拟器,就会编译错误:undefined symbols for architecture i386,表示现在这个静态库在i386架构上是不可用的

2)可以理解为每个手机的cpu架构都是不一样的,所以用某个模拟器编译的静态库只能用于同一模拟器上

模拟器:

iPhone4s 到 iPhone5 :i386

iPhone5s 到 iPhone6plus : x86_64

真机:

iPhone3gs 到 iPhone4s :armv7

iPhone5 到 iPhone5c :armv7s

iPhone5s 到 iPhone6plus :arm64

3)查看某个静态库文件是使用的什么架构进行编译的命令:lipo -info 静态库.a

      也可以将几个不同架构上编译的静态库进行合并,则合并之后的静态库可以同时运行在几个不同的架构上:lipo -create 静态库1.a 静态库2.a -output 合并后的静态库.a

      也可以设置,让静态库同时支持几个架构:

target --> Build Settings --> Build Active Architecture Only (只编译当前活跃的架构) 设置为NO即可

在这个地方可以看到 Release和Debug两个选项,其中Release默认为NO,Debug默认为YES

6.release发布版本和debug版本的区别

一个是发布版本,一个是调试版本。调试版本系统会显示更多信息用于调试,发布版本就没有这些信息了。另外发布版本比调试版本略小

7.怎么编译release版本的静态库

Edit Scheme --> Run --> 把debug改为release

8.静态库不能调试

可以创建一个专门用于调试静态库的项目,在项目中创建静态库,调试成功之后用真机编译就可以生成对应的静态库文件,可以用于其他项目了

9.如果静态库中用到了图片

》编译好的静态库是不包含它用到的图片的,如果其他项目用到了,最笨的方法是把静态库拷贝过去,同时把图片文件也拷贝过去

但是这么做一来比较麻烦,二来如果新项目中有的图片文件名和静态库中的图片文件名一样,就会出错,比较好解决方法是将图片文件打成bundle包

bundle的本质就是一个文件夹,将文件夹的后缀名改为.bundle就制作好了一个bundle文件

》需要注意的是,打成bundle包之后,静态库中用到图片的时候不能再直接写[UIImage imageWithNamed:@"imgName.png"]了,需要使用图片的全路径来加载:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"imgName.png" ofType:nil inDirectory:@"bundleName.bundle"];

10.制作framework

类似制作.a


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值