iOS开发之静态库-基本概念

  


    在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程,在iOS开发中却遇到了麻烦,原因是:苹果公司禁止在iOS开发中使用动态库(而苹果自己却可以使用动态库),同时,苹果也从Xcode中移除了创建静态框架的功能。值得庆幸的是我们可以通过对Xcode进行小小的改动来创建静态框架,而静态库和静态框架是被App Store所允许的,其实静态框架本质上说也是静态库的一种。


在正式的上代码之前,先介绍一些从网上搜集的静态库相关的基本概念,以加深对后面知识的理解


1. 库

    库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。


2. 区别

    静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

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


3.iOS中静态库的形式

        在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。

        之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却

    又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库(无

    可奈何啊)。


4..a与.framework的区别

        二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制

    文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。


5.静态库使用的必要性

    1> 代码的共享与重用

    2> 程序模块化

    3> 分享给别人代码库时代码隐藏

    4> 开发第三方SDK


6.对图片资源和UI界面xib或nib文件的处理

        .a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该

    bundle文件的名字和.a或.framework的名字相同。关于bundle文件的制作方法,后面有专门介绍。

    有个疑问:

        .a文件中无法存放图片或xib文件,很容易理解,但是.framework从本质上说也是一个bundle文件,为什么

    不把图片或者xib文件直接放在.framework中而单独再创建个bundle文件呢?

        那是因为iOS系统不会去扫描.framework下的图片等资源文件,也不会在项目中显示,也就是说即使放在 

    .framework目录下,系统根本就不会去扫描,因此也无法发现使用。


7.category的处理

        category是项目开发中经常用到的,把category打包成静态库是没有问题的,但是在使用这个静态库时,

    调用category中的方法时会发生找不到该方法的运行时错误(selector not recognized),解决的办法是在使

    用静态库的工程中配置other linker flags的值为 -ObjC  -all_load

你可能感兴趣的:(iOS开发之静态库-基本概念)