为什么要用-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一下细看。 但是每次在...
  • u011332675
  • u011332675
  • 2013年10月29日 15:06
  • 387

在iOS的XCode工程配置中为什么要用-all_load&-ObjC

-ObjC 这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和cate...
  • u010040590
  • u010040590
  • 2014年10月22日 11:43
  • 420

为什么要用工作流?为什么要用JBPM

这样看的项目对工作流的需求,简单的不怎么变少量流程需求可以不考虑用jbpm.完全可以用程序写死了流程.jbpm的优势是对复杂多变的流程定义和控制能力一套完成的流程引擎思路.当你流程需求足够复杂和需要你...
  • dankes
  • dankes
  • 2008年07月13日 22:23
  • 1634

为什么要学习使用LINQ技术

11.2  LINQ基础视频精讲:光盘/video/baseVideo/11/ LINQ基础.swf在第9章和第10章,我们学习了如何使用ADO.NET和SQL语句来从数据库中查询数据。事实上,LIN...
  • binyan51job
  • binyan51job
  • 2010年03月31日 14:48
  • 830

为什么要学shiro

1.1 什么是shiro Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。 1....
  • abou15871390117
  • abou15871390117
  • 2017年11月15日 15:43
  • 148

为什么我们要用Spring?

在之前的文章说说java反射(2)反射的价值我们对java反射的内容有了一定的了解,并且通过反射机制做了一个简单的框架,也算是对于Spring框架的铺垫.接下来了解一下我们使用Spring框架的意义....
  • jnqqls
  • jnqqls
  • 2013年02月28日 14:45
  • 4261

Hibernate工作原理及为什么要用?

http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html
  • u012307002
  • u012307002
  • 2014年02月16日 16:17
  • 420

为什么要用Ant?

这是Ant的作者James Duncan Davidson的解释:"我尝试了许多方法来编写一个make文件,从而对于需要重编译的工程,使得其中的所有源文件一次即传递给javac.但是,无论我怎样努力,...
  • everthing99
  • everthing99
  • 2014年03月05日 13:42
  • 843

为什么需要flume以及flume的原理

1.为什么要有flume?     flume的设计宗旨是向hadoop集群批量导入基于事件的海量数据。一个典型的例子就是利用flume从一组web服务器中收集日志文件,然后把这些文件中的日志事件转...
  • qq_26442553
  • qq_26442553
  • 2018年01月11日 13:00
  • 245

前端为啥要用javascript框架

前端使用EXT.JS,如果存在两个控件,其中A控件的ID 与 B控件的name相同的话,会报错。ID不能存在相同的情况众所周知,而不同的控件,ID也不能相同,恐怕只有遇到过的人才知道了,这不,我就遇上...
  • leftfist
  • leftfist
  • 2015年06月15日 16:59
  • 1699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么要用-all_load&-ObjC
举报原因:
原因补充:

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