<分区>
我刚开始阅读 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:
这是什么意思?我似乎跟不上它。
标签 objective-c null
<分区>
我刚开始阅读 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/1074321/