zoukankan      html  css  js  c++  java
  • iOS

     

    一、概念篇

    什么是库?
    库是程序代码的集合,是共享程序代码的一种方式
    根据源代码的公开情况,库可以分为2种类型
    开源库
    公开源代码,能看到具体实现
    比如SDWebImage、AFNetworking
    闭源库
    不公开源代码,是经过编译后的二进制文件,看不到具体实现
    主要分为:静态库、动态库
    静态库和动态库的存在形式
    静态库:.a 和.framework
    动态库:.dylib 和.framework
    静态库和动态库在使用上的区别
    静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝

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

    需要注意的是:

    动态库,不能被上传到AppStore(逼格太高 大苹果可是不允许的哈  哈哈)

    总结:个人觉得 .a静态库的 本身就是一个对代码或者一个功能的封装,只不过是不开源的。

    二、制作流程(如下均是Xcode7展示的操作)

    新建一个纯净的项目-> 选择 “Cocoa Touch Static Library”

    输入想要打包的静态库的名称

    把库需要包含的源代码拖入此项目中 

    此处有一些注意点见下图

    选择需要暴露出来的.h文件,.m文件会自动编译到.a文件中



    分别选择模拟器和真机(并不需要真正的手机),依然Command+B ,模拟器和真机环境下用的.a文件是分开的

    这一步,如果看到.a文件由红变黑说明编译等都没有问题  已经完成一半了

    右击“ShowInFinder”,查看制作好的.a文件

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

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

    在终端输入指令
    首先文件切换到 Products文件夹  

    然后输入

    lipo -createDebug-iphoneos/libXXX.a Debug-iphonesimulator/libXXX.a  -output  libXXX.a

    蓝色部分是固定指令
    红色、紫色是真机和模拟器.a文件的路径
    绿色是所合成.a文件的路径
    .a文件的体积(一般情况下)
    真机用的.a> 模拟器用的.a

    所合成.a== 真机用的.a+ 模拟器用的.a

    使用.a 静态库

    现在.a静态库和头文件都有了就可以把它们拖到项目中使用了

    使用时直接#import"xxx.h"就可以直接导入调用使用了

    至此,静态库算是制作完了,但是有以下几点需要说明

    无论是 .a 静态库还是.framework 静态库,最终需要的都是:
    二进制文件 +.h+ 其它资源文件

    倘若自己所需要打包的静态库代码中用到了别人的三方框架比如“AFNetworking”等,此时只需要把用到的三方库文件的头文件在选择暴露头文件时都给暴露出去,然后导入的项目中如果也用到了相同的三方框架,此时此项目就不需要拖入这个三方库代码直接,需要使用时直接把你所提供的.a静态库和头文件导入 然后#import你所提供的相关头文件即可使用(注意:一定是以你的打包的为准)比如 直接#import"xxx.h"

    若是自己的静态库原代码中使用了分类  比如NSString+xxxx,此时一定需要更改下项目的环境配置
    添加一个“-ObjC”(注意"O""C"是大写的)

  • 相关阅读:
    跨域问题(使用jsonp解决)
    通用Mapper使用(Maven+SSM)
    hosts文件修改(域名和IP地址对应修改)
    ExportExcel(用poi导出Excel文件:用List<Map<String,Object>>)
    activiti已结束子流程退回
    一个数据库死锁的案例
    mysql函数使用的例子
    mybatis拦截器
    Objects工具类
    Spring Boot 中读取配置属性
  • 原文地址:https://www.cnblogs.com/gongyuhonglou/p/10311545.html
Copyright © 2011-2022 走看看