zoukankan      html  css  js  c++  java
  • 静态库和动态库

    #pragma mark -- 静态库和动态库
    一般加两个 -ObjC -all_load
    -ObjC这个flag告诉链接器把库中定义的Objective-C类和Category(自己写的分类)都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。

    -all_load这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是-force_load后面必须跟一个指向静态库的路径。

    静态库:.a 和 .framework 自己的framework
    动态库:.dylib 和 .framework 系统的framework

    .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。.a文件不能直接使用,至少要有.h文件配合。.framework文件可以直接使用,.a + .h + sourceFile = .framework

    静态库和动态库在使用上的区别
    静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
    动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载 一次,多个程序共用,节省内存
    项目中如果使用了自制的动态库,上传到AppStore会审核不过关

    打包静态库 图片等资源放到一个.bundle文件中

    NSString *image = [[NSBundle mainBundle] pathForResource:@"bd_logo.png" ofType:nil inDirectory:@"Tool.bundle"];
    return [UIImage imageWithContentsOfFile:image];

    查看静态库支持的平台、合并静态库

    可以借助 lipo -info 静态库文件地址 查看当前静态库支持的平台 x86_64的是模拟器 armv7 arm64 真机
    可以借助 lipo -create libdev/lib08-staticDemo.a libPro/lib08-staticDemo.a -output HMTool.a 指令将模拟器和真机的静态库合并为一个静态库
    lipo -create 需要合并的静态库1 需要合并的静态库2 -output 合并之后的文件名称.a

    如果需要在当前工程中开发静态库, 需要配置targets > build Phases > target Dependencies 和 Link Binary WithLibraries 下面点击+ 添加.a文件

    静态库文件的版本(4种)
    1.真机-Debug版本
    2.真机-Release版本
    3.模拟器-Debug版本
    4.模拟器-Release版本

    调试版本 VS 发布版本
    --------------------------------------------------------------------------------
    - 调试版本会包含完整的符号信息,以方便调试
    - 调试版本不会对代码进行优化

    - 发布版本不会包含完整的符号信息
    - 发布版本的执行代码是进行过优化的
    - 发布版本的大小会比调试版本的略小
    - 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升

    更多内容--> 博客导航 每周一篇哟!!!

    有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!

  • 相关阅读:
    JavaScript学习笔记(三十八) 复制属性继承
    每天一道逻辑思维题
    动态规划(4):求子数组最大和
    30天自制操作系统第四天学习笔记
    UVA 1344 Tian Ji -- The Horse Racing
    Word隐藏回车符技巧
    Apache Thrift
    Android更改桌面应用程序launcher的两种方式
    Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)
    Java Collection
  • 原文地址:https://www.cnblogs.com/CoderEYLee/p/Object-C-0034.html
Copyright © 2011-2022 走看看