这个flag告诉编译器把库中定义的Objective-C类和Category都加载进来,这样编译之后的app会变大(因为加载了其他的Objc代码进来).但是如果静态库中有类和category的话,只有加入这个flag才行.
这个flag是专门处理-ObjC的一个Bug.用来-ObjC以后,如果类库中只有category没有类的时候,这些category还是加载不进来.变通方法就是加入-all_load或者-force_load.-all_load会强制链接器把目标文件都加载进来,即使没有Objc代码,-force_load在xcode3.2后可用.但是-force_load后面必须跟一个静态库的路径
一些第三方库里对系统的类添加了 category
这时,就需要使用编译参数-ObjC ,这样第三方库中对系统类作的扩展方法才能在工程中使用
但是使用-ObjC 后,会产生两个问题 :
1.undefined symbols
2.duplicate symbols
如果不加-ObjC 参数,则在编译时不会出错,但在运行时用到了没有引用库的方法,则系统会崩溃
这个问题好解决,只要找到缺的库,引入工程就可以了
最常见的比如Reachability 这个类.如果第三方库中引用了,自己的工程中也引用了.就会报duplicate symbols
如果引用的第三方库没有源代码,就只能将自己工程中的重名类重命名了
1.避免对系统类加category 这样,别人用到你的库时,不加ObjC参数也可以用你的库
2.如果库中用到了其它的第三方的源代码,尤其是用的比较普遍的,如 Reachability ,一定一定要对这些类重命名,最常见的做法是给类加个前缀,以避免别人用你的库时,产生duplicate symbols 的问题