为什么要用-all_load&-ObjC

转载 2016年06月01日 11:55:10


  • 技术问题发到问答:我知道,我仍旧要在论坛继续发布问题
为了减少工作量复用部分代码,于是乎我们开始选择重构整个项目,把可以公用的代码放在一起打包成一个
静态库子项目在其他的项目中使用。介绍这部分内容的文章在网上很多,各位可以G一下细看。

但是每次在加入静态库的时候都会在other linker flag里设置两个值:-all_load和-ObjC。
很奇怪为什么要这样做,而且有的时候什么都不设置也不影响静态库的使用。
所有使用了这个静态库的项目都没有出现任何的问题,即使不设置那两个flag值。

于是拜求G大神,终于找到了结果。
关于-ObjC的:
引用 
This flag causes the linker to load every object file in the library that defines an Objective-C class or category. 
While this option will typically result in a larger executable (due to additional object code loaded into the application), 
it will allow the successful creation of effective Objective-C static libraries that contain categories on existing classes.

翻译过来是:
引用 

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


关于-all_load的
引用 
IMPORTANT: For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. 
The workaround is to use the -all_load or -force_load flags. -all_load forces the linker to load all object files from every archive it sees, even those without Objective-C code.
-force_load is available in Xcode 3.2 and later. It allows finer grain control of archive loading. Each -force_load option must be followed by a path to an archive, 
and every object file in that archive will be loaded.


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

读了以上你明白了吧。
无论如何还是把那两个flag的值都加上吧。这样可以保证你哪天突发奇想加了一堆category什么的oc牛X语法也不至于项目崩溃。

亲们,觉得有价值就顶起来吧 

为什么要用-all_load&-ObjC

为了减少工作量复用部分代码,于是乎我们开始选择重构整个项目,把可以公用的代码放在一起打包成一个 静态库子项目在其他的项目中使用。介绍这部分内容的文章在网上很多,各位可以G一下细看。 但是每次在加入静...
  • xin814
  • xin814
  • 2013年07月16日 15:02
  • 2931

静态库编译命令-ObjC, -all_load, -force_load

有时在做项目的时候会涉及到使用第三方的库,有些库的添加说明中有时会让在Xcode的Build Settings下Other Linker Flags 中添加 -ObjC、 -all_load 或者...
  • jiisd
  • jiisd
  • 2015年09月20日 16:15
  • 814

-ObjC ,-all_load,_force_load的使用场景,用法和区别

一直没有足够的动力写一篇博客,尤其是在如此的深夜,安静的夜给我安静的大脑...其实我要说的是这是我第一篇正式技术博客,时间:深夜. 最近项目要求使用到 cordova实现 JS 和 Native的通...

ios 静态库(.a)文件相关流程及-ObjC, -all_load, -force_load

关于.a文件的制作,网上有很多博客:http://www.jianshu.com/p/8f5b9855efb8。http://www.jianshu.com/p/43d55ae49f59。这里不再赘述...
  • Que_Li
  • Que_Li
  • 2016年12月13日 11:59
  • 349

Xcode里-ObjC, -all_load, -force_load

使用第三方库时,比如XXSDK、SW

ObjC 类的加载和初始化(+load 和 +initialize 方法)

类的初始化方法

ios程序编译链接参数 all_load 的 ld duplicate symbol 的bug及修复

duplicate symbol _OBJC_CLASS 的几种原因 1.项目文件里面有多个相同名字的文件; 2.import 的时候.h写成.m了;xcode的自动完成特性,在你导入头文件的时候...

ios程序编译链接参数 all_load 的 ld duplicate symbol _main 的 bug及修复

问题 -all_load 是在Objective-C 编译时常用到的一个参数,比如这篇文章所介绍的,生成静态库的一些问题-all_load。但是我们在加入这个参数后,有时会出现“ld: du...

-all_load和-force_load 的区别

(转载) 1.使用-all_load选项,这会导致所有的类的方法都会被载入,不管“你的程序”有没有用到,所有的,包括系统的,方法会被载入。这个方法不仅会导致你的目标程序大小增大,而且往往容易引起一些...
  • jsd0915
  • jsd0915
  • 2017年06月13日 13:51
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么要用-all_load&-ObjC
举报原因:
原因补充:

(最多只允许输入30个字)