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(通知...