我刚刚开始阅读Objective-C教程,并且有一个关于"发送消息nil"的部分:
Cocoa中有几种模式可以利用这一事实.从消息返回到nil的值也可能是有效的:
这是什么意思?我似乎无法遵循它.
Tom*_*ing 11
e.J*_*mes 10
特殊处理nil意味着您可以执行以下操作:
SomeClass * someObject;
someObject = nil;
[someObject doSomething];
Run Code Online (Sandbox Code Playgroud)
你可以放心,什么都不会发生.
现在,为什么这很重要?
在Objective-C中,向对象发送消息意味着告诉该对象做某事,或者向该对象询问某些信息.一些例子:
[someObject updateRecords]; // 1
x = [someObject size]; // 2
Run Code Online (Sandbox Code Playgroud)
第1行发送someObject一个名为的消息updateRecords,第2行向同一个对象发送一个名为的消息size,该消息应该返回一个值.这些消息归结为方法调用,最终运行的实际代码由Objective-C运行时系统确定,因为Objective-C是动态类型语言.
要确定要调用哪个方法,运行时系统将从相关对象的地址中读取信息(someObject在上面的示例中),以确定它是哪个类的实例.使用该信息,它能够查找适当的方法来调用,当所有已经找到的方法时,它会执行方法中的代码.
如果运行时系统没有将其nil视为特殊情况,那么如果您尝试执行顶部显示的代码,它可能会崩溃.nil被定义为零,因此运行时将开始从存储在存储器中的零位置的地址读取信息,这几乎被认为是访问冲突.
| 归档时间: |
|
| 查看次数: |
11593 次 |
| 最近记录: |