zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    JavaScript与C# Windows应用程序交互
    用DateTime.ToString(string format)输出不同格式的日期
    时间间隔与暂停
    C#中比较两个时间的时间差
    lambda函数的用法
    Tornado笔记
    DjangoWeb应用开发实战笔记
    再看装饰器
    描述符
    flask简单代码回顾
  • 原文地址:https://www.cnblogs.com/mylizh/p/3971428.html
Copyright © 2011-2022 走看看