什么时候会报unrecognized selector的异常

当调用对象的某个方法的时候,如果在当前类中没有找到此方法,那么就到当前类的父类中去寻找,如果在父类中没有找到,那么就去父类的父类中去寻找,一直找到 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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FlawyFlawy认证作者
上一篇 2023年5月29日
下一篇 2023年5月29日

相关推荐

  • 软件项目如何管理风险评估

    软件项目管理风险评估是一系列用以识别、分析和减轻潜在风险的策略和工具。此过程涵盖了从早期风险识别,到风险分析、风险优先级排序、制定应对策略、以及对风险监控和报告的全面方法。风险评估是确保项目成功的关键,它能够帮助项目团队预见未来可能遇到的问题,并提前准备解决策略。 具体来说,风险评估需要对每个潜在风…

    2024年4月10日
    8100
  • wiki上能做需求管理吗

    wiki上能做需求管理。wiki做需求管理的步骤为:1、明确项目目标;2、发掘用户需求;3、定义需求;4、整理需求;5、跟踪需求。明确项目目标是指在Wikipedia上提供项目目标的条目,可以帮助您和您的团队明确正在设计的产品或服务所需要满足的核心目标。 一、wiki做需求管理的步骤 虽然Wikip…

    2023年4月4日
    51200
  • 企业erp管理系统设计

    开门见山地说,企业ERP管理系统设计意在增强组织资源规划效率、优化流程管理、加强决策支持。这类系统贯穿企业核心业务,强化信息流与供应链协同。重要的设计因素包括:1、模块化结构;2、数据整合能力;3、用户友好性;4、可定制性;5、稳定的技术支持基础。其中,模块化结构的设计允许不同的业务单元根据需求自由…

    2024年1月9日
    22200
  • mongodb compass怎么批量删除数据

    mongodb compass批量删除数据的步骤是:一、连接 MongoDB 数据库;二、选择要删除的数据;三、批量删除数据。在使用Compass批量删除数据之前,首先需要连接到要操作的MongoDB数据库。在Compass主界面的左侧菜单栏中,点击“New Connection”按钮,输入Mong…

    2023年5月30日
    2.6K00
  • 资深Java工程师和小白的区别有哪些

    资深Java工程师和小白的区别在于:编码速度更快,任何功能都能轻易实现,代码流畅无bug出现。Java大神之所以能够实现以上技术,原因就在于他们认识到了bug的不可避免性,与此同时有力求逻辑严密,减少bug的出现。

    2023年2月14日
    35200
  • 如何管理地质灾害治理项目

    管理地质灾害治理项目需要一系列综合措施,包括 风险评估、规划与设计、实施监督、维护与监测。特别是在规划与设计阶段,必须细致考虑地质条件、环境影响和项目可行性,来确保治理措施既有效又可持续。此阶段的目标不仅是解决当前的问题,而是预防未来可能发生的地质灾害,因此需要聚焦于地质灾害的本质原因和潜在风险,结…

    2024年4月10日
    4000
  • VSCode为什么要自己配置

    VSCode是一个高度可定制的代码编辑器,它能够通过用户自定义配置以更好地满足不同编程语言和项目的特定需求。核心原因包括提高开发效率、个性化开发环境、满足特定项目需求、以及扩展功能性。 其中,提高开发效率尤其值得关注。通过自定义配置,开发者可以设置快捷键、选择适合的代码风格、配置编译运行环境、以及安…

    2024年4月3日
    6500
  • 基于ipd的研发项目管理

    由于您没提供具体的标题,我将基于提供的主题“基于IPD的研发项目管理”来撰写。 摘要:基于*集成产品开发(Integrated Product Development, IPD)*方法的研发项目管理,旨在提高研发效率、降低成本、缩短上市时间、提高产品质量。核心要点包括1、跨功能团队协作、2、前期规划…

    2024年1月10日
    21100
  • 怎样管理团队,带领团队

    管理团队带领团队要做到:1、了解团队成员;2、明确定义目标;3、提供有效的反馈;4、促进沟通;5、建立团队文化;6、培养领导能力。要想有效地管理团队,必须首先了解团队成员的能力和需要。 1、了解团队成员 要想有效地管理团队,必须首先了解团队成员的能力和需要。了解每个成员的长处和短处,能够帮助你安排工…

    2023年2月27日
    54500
  • 如何制定有效的OKR来提高团队绩效

    摘要:有效的OKR(目标与关键结果)制定对于提高团队绩效至关重要。它可以1、提供清晰方向、2、促进团队协作、3、增强动力与责任感、4、实现持续进步。要制定有效的OKR,首要步骤是设定既具有挑战性又可实现的目标,并确保这些目标紧密结合团队和组织的长远愿景。接着,关键结果的制定要量化,便于跟踪和评估进展…

    2023年12月8日
    32900

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部