有时我们在集成别人的SDK时,会遇到找不到某个分类文件中某个方法的问题,这时我们可能会怀疑是不是SDK静态库中是否将该文件添加到静态库中没.但是一个成熟的SDK是不会犯这么低级的错误的,那到底是什么问题导致的这个原因啦.应该如何修改啦.很简单只需要在buildSetting的other link flags中添加-objc就可以了.
先来说说-objc是干什么用的
简单的说:-Objc链接指令是用来解决static library在运行时调用cateogry方法报selector not recognized错误时使用的.也就是说你在一个静态库中里面声明了一个category,在运行的时候调用这个方法很有可能就会出现这个错误,而这个错误本不应该出现.因为你已经定义了那个方法,那么为什么会出现这样的问题啦.
这是因为:unix系统的静态库.a文件和oc的动态机制不协调导致的.
因为cateogry只是一个方法的集合,而对一个cateogry中方法的调用,并不会生成未定义符号,这就意味着链接器并不知道要去加载这个cateogry文件所生成的objc文件,于是在最后运行时的时候,运行时系统便会无法找到相应的方法的定义,从而抛出unrecognized selector 错误
-objc干了什么
加上-objc,链接器便会加载静态library李曼所有的Objective-C实现的雷和cateogry.
其它选项:
-objc-all_load全部加载,加载静态库的全部成员.
-force_load path_to_load 对某个指定静态库全加载
好了,如果在修改过程中遇到什么问题,可以与我联系.
如果喜欢小编,可以点击关注,我会不定期的更新一些文章,也可以关注我的专题
本人联系方式:qq:513961360
email:513961360@qq.com
也可以加我们的qq群希望能与朋友们一起聊天和学习.群里还有很多iOS开发者,帮助我们解决问题,并且同时学习.
qq群号:580284575
网友评论