gpt4 book ai didi

objective-c - "sending a message to nil"是什么意思,为什么是特例?

转载 作者:行者123 更新时间:2023-12-01 16:23:40 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Sending a message to nil in Objective-C

(11 个回答)


9年前关闭。




我刚开始阅读 Objective-C 教程,其中有一节是关于“向 nil 发送消息”:

There are several patterns in Cocoa that take advantage of this fact. The value returned from a message to nil may also be valid:



这是什么意思?我好像跟不上。

最佳答案

nil的特殊处理意味着您可以执行以下操作:

SomeClass * someObject;
someObject = nil;
[someObject doSomething];

您可以放心,不会发生任何事情。

现在,为什么这很重要?

在 Objective-C 中,向对象发送消息意味着告诉该对象做某事,或要求该对象提供一些信息。一些例子:
[someObject updateRecords]; // 1
x = [someObject size]; // 2

第 1 行发送 someObject一条名为 updateRecords 的消息,第 2 行向同一个对象发送一条名为 size 的消息。 ,预计会返回一个值。这些消息归结为方法调用,最终运行的实际代码由 Objective-C 运行时系统确定,因为 Objective-C 是一种动态类型的语言。

为了确定调用哪个方法,运行时系统从相关对象的地址( someObject,在上面的示例中)读取信息,以确定它是哪个类的实例。使用该信息,它能够查找要调用的适当方法,并且当所有这些都弄清楚时,它会执行该方法中的代码。

如果运行时系统没有处理 nil作为一种特殊情况,如果您尝试执行顶部显示的代码,它可能会崩溃。 nil被定义为零,因此运行时将开始从存储在内存中位置零的地址中读取信息,这几乎可以保证是访问冲突。

关于objective-c - "sending a message to nil"是什么意思,为什么是特例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44599274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com