美文网首页iOSiOS学习iOS
06.iOS 静态库的封装和使用

06.iOS 静态库的封装和使用

作者: Liwx | 来源:发表于2016-01-16 01:37 被阅读1431次

@(〓〓 iOS-实用技术)[静态库/动态库封装]


目录

  • 06.iOS 静态库的封装和使用
  • 1.iOS 库的基本概念
    • 静态库和动态库
  • 2.静态库的封装
    • .a静态库的封装
      • 编译Debug/Release 模拟器/真机版本的静态库
      • 合并静态库
    • .framework静态库的封装
      • .framework静态库的使用

1.iOS 库的基本概念

库就是程序代码的集合,是共享程序代码的一种方式.


静态库和动态库

  • 1.iOS中静态库和动态库文件的后缀名

    • 静态库文件后缀名: .a.framework
    • 动态库文件后缀名: .dylib.framework
  • 2.静态库和动态库的区别

    • 动态库则不会复制, 只有一份. 程序运行时动态加载到内存; 系统只加载一次, 多个程序共用, 节省内存;
    • 但是项目中如果使用到自己的动态库, 不允许上架!
      但是WWDC2014上公布的苹果对ios8开放动态加载dylib的接口,也就是说 开放了动态库挂载.
    • 静态库在链接时, 会被完整的复制到可执行文件中; 被多次使用, 就有多份拷贝;

2.静态库的封装

.a静态库的封装

  • 1.创建工程选择iOS/Framework & Library,选择Coaoa Touch Static Library
01.创建工程.png
  • 2.设置对外公开的头文件
02.设置对外公开的头文件.png
  • 3.设置让所有架构都能正常编译和使用
03.设置让所有架构都能正常编译和使用.png
  • 5.创建一个Log类,实现接口方法,并在.h文件中对外提供接口方法
// Log.h文件中提供接口
+ (void)wxLog;

// Log.m文件中实现方法
+ (void)wxLog
{
    NSLog(@"Test Lib");
}
04.创建一个Log类.png
  • 6.使用快捷键command + b编译静态库(当前运行选择为模拟器),编译成功后找到库存储路径.

进入静态库生成的路径中

05.静态库生成的路径.png

以上操作弹出窗口后进入Build/Products/Debug-iphonesimulator文件夹中,.a的库文件对外公开的头文件就存放在该目录下.因为刚才是处于Debug模式下选择模拟器运行环境,所以生成的Debug-iphonesimulator文件夹

06.Build:Products:Debug-iphonesimulator文件夹.png
  • 7.确保生成的静态库能在你所有模拟器上运行,先查看静态库支持的平台.
    • 使用lipo -info查看库所支持的架构. i386 x86_64: 表示能在所有模拟器上运行.
    • 模拟器架构: iPhone 4s - iPhone 5是i386架构,iPhone 5s - iPhone 6s Plus是x86_64架构.
07.查看库所支持的架构.png
  • 8.静态库的使用.只需将生成的.a文件和.h文件拖入到测试静态库的工程即可使用静态库.
08.静态库的使用.png 09.静态库的使用.png

编译Debug/Release 模拟器/真机版本的静态库

  • 1.设置要编译成Debug还是Release版本的静态库.如果是要生成Release就选择Release
10.设置要编译成Debug还是Release版本的静态库.png 11.选择对应的版本.png
  • 2.设置要编译成真机还是模拟器版的静态库
12.设置要编译成真机.png
  • 3.如果四种情况的静态库都进行编译,则会生成以下四个文件夹
13.四种情况的静态库都进行编译.png

合并静态库

  • 1.使用lipo -create ... -output ... 合并静态库.最终合并的静态库的大小相当于Debug Device.a和Debug Simulator.a的总和.
14.合并静态库.png

.framework静态库的封装

  • 1.创建工程选择iOS/Framework & Library,选择Coaoa Touch Framework
15.创建工程.png
  • 2.删除自动生成的头文件.注意: Info.plist不能删除

16.删除自动生成的头文件.png
  • 3.创建Tool类,并对应提供log类方法,实现log类方法
// Tool.h文件中提供接口
+ (void)log;

// Tool.m文件中实现方法
+ (void)log
{
    NSLog(@"framework Test");
}

  • 4.设置要生成的.framework文件为静态库
17.设置要生成的.framework文件为静态库.png
  • 5.设置支持所有架构
18.设置支持所有架构.png
  • 6.设置要公开的所有头文件
19.设置要公开的所有头文件.png

.framework静态库的使用

  • 1.创建一个测试静态库的工程,生成的.framework的静态库拖入到工程
20.静态库拖入到工程.png
  • 2.使用尖括号<>导入头文件之后就能正常使用.framework的静态库
    • 注意: 导入头文件为 #import <Framework/Tool.h>
21.使用.framework的静态库.png

相关文章

  • 06.iOS 静态库的封装和使用

    @(〓〓 iOS-实用技术)[静态库/动态库封装] 作者: Liwx 邮箱: 1032282633@qq.com...

  • iOS开发 - Workspace的创建和添加多项目工程

    前提背景: 使用WorkSpace 管理一个业务项目主工程和一堆自定义封装的静态库/动态库,主项目可以调用静态库/...

  • IOS动态库和静态库的区别

    framework 是什么 framework 是对静态库和动态库的一个封装(包括了静态库和动态库) 加载方式静态...

  • 让静态库中的 Category 可用

    让静态库中的 Category 可用 前几天将常用的代码封装成静态库( .a )供给其他项目使用。在使用的过程中我...

  • 封装.a静态库

    封装.framework库 目录__封装静态库基础知识_____1. 新建静态库项目_____2.添加头文件___...

  • iOS开发静态库

    如果你想偷懒,务必要学会静态库的制作,一定要有自己的一套静态库。优点:易维护、整洁性、封装。 一、静态库和动态库的...

  • iOS静态库之间互调冲突问题

    研究目的 1. 在其他静态库(B静态库)中导入公共静态库(A静态库),想直接使用公共静态库(A静态库)中的方法和m...

  • iOS学习笔记-封装含静态库的动态库

    iOS学习笔记-封装含静态库的动态库

  • Go导出的库给VS使用

    说明:go在windows下可以导出静态库和动态库,静态库是.a文件是不能给vs使用的,也没法转成vs使用的静态库...

  • ios中静态库.a的制作

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

网友评论

  • 中年海豹:XCODE9中不能直接拖进项目里使用,会提示找不到头文件,但是framework明明已经拖进去了,求大神更新XCODE9的教程。
  • 751fc49dcbfd:试过合并debug 与release吗
  • 鼻毛长长:为什么3的target的图标不一样啊?

本文标题:06.iOS 静态库的封装和使用

本文链接:https://www.haomeiwen.com/subject/vqphkttx.html