问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

iOS面试题:objc中向一个nil对象发送消息将会发生什么?

发布网友 发布时间:2023-01-27 06:37

我来回答

1个回答

热心网友 时间:2023-05-11 19:11

首先,需要搞明白2个问题:

isa指针是用于对象指向类对象,类对象指向元类对象的一个指针。而类对象和元类对象中又分别存放对象方法和类方法。 在消息传递机制中,就是通过isa指针来寻找到方法的实际调用地址的。

objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。 那么,回到本题,如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。

更多: iOS面试题合集

iOS面试题:objc中向一个nil对象发送消息将会发生什么?

objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。 那么,回到本题,如果向一个nil对象发送消息,首先在寻找对象的...

objc对象调用方法详细过程

如果我们动态解析没有做事情 就会来到消息转发_objc_msgForward_impcache这个imp我们发现在汇编中找到,但是经过分析是没有源码的,这里暂不分析汇编 下面列出动态转发的几个方法.在消息转发阶段如果-forwardingTargetForSelector没有实现,就会调用- methodSignatureForSelector方法自己返回方法签名, 然后调...

ios中有什么方式支持多继承

向当前类发送 resolveInstanceMethod: 信号,检查是否动态向该类添加了方法。(迷茫请搜索:@dynamic)2.快速消息转发 检查该类是否实现了 forwardingTargetForSelector: 方法,若实现了则调用这个方法。若该方法返回值对象非nil或非self,则向该返回对象重新发送消息。3.标准消息转发 runtime发送methodSignatu...

使用NSInvocation 向对象发送消息

第一种:新建一个相同类型的对象并指向它,这样做 result 就会强引用 tempResult,当做返回数据返回之后会自动添加 autorelease 关键字,也就不会造成野指针异常。第二种:�使用 __bridge 将缓存区转换为 Objective-C 类型,这种做法其实跟第一种相似,但是我们更建议使用这种方式来解决以上问题,...

用objective-c语言实现一个消息中心(NSnotificationcenter)功能_百度知...

object:nil]3)B触发事件[[NSNotificationCenter defaultCenter]postNotificationName:@"update"object:nil]每一个进程都有一个默认的NSNotificationCenter,可以通过类方法defaultCenter获取该消息中心的实例。消息中心可以处理同一进程中不同对象之间的消息。如果要在同一台机器上进行进程间的通信,需要使用NS...

iOS Runtime理解

(1)消息传递的过程 一个对象的方法[obj test],编译器转成消息发送objc_msgSend(obj,test),Runtime执行的流程是这样的 a.首先通过obj的isa指针找到它的class b.在class的method list找test c.如果class中没找到test,继续往它的superclass中找 d.一旦找到test这个函数,就去执行它的IMP 由于效率...

Objective-c 中 nil,Nil,NULL和NSNull的区别

类类型的书面空值,对应 Class 类型对象。nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interface 声明的 ObjC 对象。NULL 是任意的 C 指针空值。NSNull 是一个代表空值的类,是一个 ObjC 对象。实际上它只有一个单例方法:+[NSNull null],一般用于表示集合中值为空的对象。

iOS开发面试拿offer攻略之block篇

Block 是将函数及其执行上下文封装起来的对象。 比如:通过 clang -rewrite-objc WYTest.m 命令编译该 .m 文件,发现该 block 被编译成这个形式:其中 WYTest 是文件名, blockTest 是方法名,这些可以忽略。其中 WYTest blockTest_block_impl_0 结构体为 --block_impl 结构体为 block 内部有...

ios开发:NULL、Nil、nil、NSNull 有何区别?

对比: 在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。而且我们对于nil调用方法,不会产生crash或者抛出异常。 这个技术被framework通过多种不同的方式使用。最主要的就是我们现在在调用方法之前根本无须去检查这个对象是否是nil。假如我们调了nil...

iOS开发中,关于什么时候使用点语法的解答

notification 在IOS应用开发中有一个”Notification Center“的概念。它是一个单例对象,允许当事件发生时通知一些对象。它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。 这种模式的基本特征是为了让其他的对象能够接收到在该controller中发生某种事件而产生的消息,controller用一个key(通知...

libobjc consp nil objc_msgSend objc_class _objc_retain fontenil one nil nil_o niance
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上海2013中考二模浦东新区和静安区市重点参考录取分数线 2012上海中考自荐 腾讯服务器崩溃了吗 淘宝店铺名怎么工商注册 开淘宝店需要办理工商营业登记册吗?怎么办理? 淘宝开店需要个体户工商证吗?怎么开店? 腾讯垃圾服务器 西安水岸龙庭怎么样?好不好?值不值得买? 任何人都可以发腾讯黄金红包吗? 夫妻是否可以单方面强制离婚 手游山海经抖音直播怎么合作 苹果11promax3c证书为什么被撤销了 赞比亚有没有核电站?核问题如何?该国关于放射性废物的处理有何做法... 非洲最大核电站 屏幕唤醒在哪里设置 电脑如何唤醒屏幕? 如何做好百货主管 《哔哩哔哩》单列模式设置方法 《哔哩哔哩》首页单双列设置方法 梦见亲家上门吵架 梦见亲家来访 电饭锅放菜焖饭怎么做 英克莱跑步机怎么样,英克莱跑步机贵吗? 《转转》手机保卖取消方法 被保险人、投保人和受益人是啥? 被保险人、投保人和承保人是啥? 投保人和被保险人是啥? 爱番漫画在线观看(5个收藏了3年的在线动漫网站) 手机可以进入动漫岛官网吗 看动漫的网站 IE主页被修改,无法修改注册表值恢复,一刷新又回到原来的值?_百度知 ... 我的微信长时间未登录进入保护模式,现在需要解除,但最主要的是... 棉服棉子洗起一起啦,我想改了,怎么改 猫咪患鼻炎该怎么办?可以根治吗? 鼻炎能治出根吗?鼻窦炎,头痛,头昏。 在公司层面建立支撑项目策划的三个库是什么 3dsky模型库怎么使用 梦见两匹大白马丢了 梦见别人偷走白马 梦见一匹大白马是什么兆头 梦见白马跑了 酱爆基围虾的家常做法 酱爆基围虾做法步骤介绍 废土2导演剪辑版打不开进不去怎么办 废土2导演剪辑版存档在哪 废土2 中文版但是对话内容大多数都是英文 怎么变成中文啊 如何有效的处理恶臭气体 绑定别人的银行卡怎么解除 可以怎么查看自家wifi密码 手机放大器大屏神器华为投影护什么手机能用 笔记本电脑可以当做闹铃来用吗?