zoukankan      html  css  js  c++  java
  • 静态库的制作

    概念

    库是程序代码的集合,是共享程序代码的一种方式
    根据源代码的公开情况,库可以分为2种类型

    开源库

    公开源代码,能看到具体实现,比如SDWebImage、AFNetworking。。。

    闭源库

    不公开源代码,是经过编译后的二进制文件,看不到具体实现
    主要分为:静态库、动态库
    静态库:.a 和 .framework
    动态库:.dylib 和 .framework

    静态库和动态库在使用上的区别
    静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝(左图所示)
    动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存(右图所示)

    PS:项目中如果使用了自制的动态库,不能被上传到AppStore

    制作.a静态库

    1.Xcode ->Framework&Library(iOS) -> Coca Touch Static Library

    2.添加需要制作的.m文件

    3.添加需要暴露出来的.h文件

    4.选择模拟器或真机 打包

      模拟器(X86_64)和真机(armv7,arm64...)打包出来的.a文件支持不同的CPU架构

      用 lipo –info libXXX.a 可以查看 .a 支持的CPU类型

      可以合并模拟器和真机的.a文件使之同时支持模拟器和真机上运行

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

    (PS:若.a有自己的资源文件,一般制作成Bundle 最终交付的为:.a + .h + Bundle

         合并.a的坏处,如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的今后在使用.a时一定注意版本

    制作.framework

    》 Xcode6 之前没有模板制作framework,必须自己手工制作,很是繁琐。

    可以借助github上的开源模板制作 https://github.com/kstenerud/iOS-Universal-Framework
      (在终端下进入iOS-Universal-Framework/Fake Framework文件夹,执行指令./install.sh安装模板)

    》Xcode6后,可以直接用Xcode提供的模板

    Xcode ->Framework&Library(iOS) -> Coca Touch Dynamic Library

    (PS: 系统模板生成的framework是动态库,appstore是不允许有自制的动态framework的,因此需要修改成静态framework

        选中framework在Build Setting->Linking->Mack-O Type 中选择Static Library即可转为静态framework

    制作静态注意点

    0).a和.framework区别

    .a 本身是一个二进制文件,需要配上 .h 和 其它资源文件 才能使用
    .framework 本身已经包含了 .h 和 其它资源文件,可以直接使用

    (图片资源的处理
      如果静态库中用到了图片资源,一般都放到一个bundle文件中,bundle名字一般跟 .a 或 .framework 名字一致
      bundle的创建:新建一个文件夹,修改扩展名为 .bundle 即可,右击bundle文件,显示包内容,就可以往bundle文件中放东西

    1)多文件处理
    如果静态库需要暴露出来的 .h 比较多,可以考虑创建一个主头文件(一般 主头文件 和 静态库 同名)
    在主头文件中包含所有其他需要暴露出来的 .h 文件
    使用静态库时,只需要#import 主头文件(实际上苹果官方就是这么做的,例如:#import <UIKit/UIKit.h>)

    2)静态库中包含了Category
    如果静态库中包含了Category,有时候在使用静态库的工程中会报“方法找不到”的错误(unrecognized selector sent to instance
    解决方案:在使用静态库的工程中配置Other Linker Flags为-ObjC

  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/shanhua/p/4771974.html
Copyright © 2011-2022 走看看