一些第三方库里对系统库的类加了 category , spa
这时,就须要使用编译参数: -ObjC ,这样第三方库中对系统类做的扩展方法才能在工程中使用。 it
可是使用 -Objc 后,会产生两个问题: 编译
1 、 undefined symbols class
2 、 duplicate symbol 扩展
undefined symbols 说明工程中没有引入第三方库引用的库。 引用
若是不加 -ObjC 参数,则在编译时不会出错,但运行时用到了没引用库的方法,则系统会崩溃。 方法
这个问题好解决。只要找到缺的库,引入工程就能够了。命名
duplicate symbol 的问题就很差解决了,说明第三方库中的类名和工程中的类名,或其它第三方库中的类名重名了。 di
最多见的好比 Reachability 这个类,若是第三方库中引用了,本身的工程中也引用了,就会报 duplicate symbol 。 源代码
若是引用的第三方库没有源代码,就只能将本身工程中的重名类重命名了。
应对上面的问题,若是本身要制做一个库的话,要注意两点:
1 、避免对系统类加 category, 这样,别人用你的库时,不加 ObjC 参数也能够用你的库。
2 、若是库中用到了其它的第三方的源代码,尤为是用的比较广泛的,如 Reachability, 必定必定要对
这些类重命名,最多见的做法就是给类名加个前缀。以免别人用你的库时,产生 duplicate symbol 的问题。