当调用对象的某个方法的时候,如果在当前类中没有找到此方法,那么就到当前类的父类中去寻找,如果在父类中没有找到,那么就去父类的父类中去寻找,一直找到 NSObject 都没有这个方法,就会报 Unrecognized selector 的异常。
当调用对象的某个方法的时候,如果在当前类中没有找到此方法,那么就到当前类的父类中去寻找,如果在父类中没有找到,那么就去父类的父类中去寻找,一直找到 NSObject 都没有这个方法,就会报 Unrecognized selector 的异常。
当发送消息的时候,我们会根据类里面的methodLists列表去查询我们要动用的SEL,当查询不到的时候,我们会一直沿着父类查询,当最终查询不到的时候我们会报unrecognized selector错误。
当系统查询不到方法的时候,会调用+(BOOL)resolveInstanceMethod:(SEL)sel动态解释的方法来给我一次机会来添加,调用不到的方法。或者我们可以再次使用-(id)forwardingTargetForSelector:(SEL)aSelector重定向的方法来告诉系统,该调用什么方法,一来保证不会崩溃。
objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,如果,在最顶层的父类中依然找不到相应的方法时,会进入消息转发阶段,如果消息三次转发流程仍未实现,则程序在运行时会挂掉并抛出异常unrecognized selector sent to XXX 。
延伸阅读:
什么是React?
React是用于构建用户界面的JavaScript库,起源于Facebook的内部项目,该公司对市场上所有 JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。于2013年5月开源。
React的早期原型被称为“FaxJS”,它是由Facebook工程师Jordan Walke开发,因为他深受XHP的影响,XHP是一个简单的PHP HTML组件框架。React于2011年首次亮相,首次用于Facebook的Newsfeed。第二年在Instagram中使用。2013年5月,React在美国JSConf开源。
React项目本身也越滚越大,从最早的UI引擎变成了一整套前后端通吃的Web App解决方案。衍生的React Native项目,希望用写Web App的方式去写Native App。如果能够实现,整个互联网行业都会被颠覆,因为同一组人只需要写一次UI ,就能同时运行在服务器、浏览器和手机。
文章标题:什么时候会报unrecognized selector的异常,发布者:Flawy,转载请注明出处:https://worktile.com/kb/p/53029