什么描述最好?真的是什么? [英] What describes nil best? What's that really?

查看:104
本文介绍了什么描述最好?真的是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前我明白它是一种空对象。但是它真的是什么?

Currently I understand it as a kind of "empty object". But what's it really?

推荐答案

Objective-C对象



当你调用这个:

Objective-C objects

First of all, when you call this:

id someObject = [NSArray array];

someObject 但只有一个指针。这意味着,如果 someObject 等于 0x1234 ,那么在内存中的那个地址有一个对象。

someObject isn't the array object directly but only a pointer to it. That means, if someObject is equal to 0x1234 there's an object at that address in the memory.

这是为什么

id someOtherObject = someObject;

不复制对象。两个指针现在指向同一个对象。

doesn't copy the object. Both pointers point now to the same object.

c> nil 定义?让我们来看看源代码:

So, how is nil defined? Let's take a look at the source code:

objc.h

#define nil __DARWIN_NULL    /* id of Nil instance */

_types.h

#ifdef __cplusplus
…
#else /* ! __cplusplus */
#define __DARWIN_NULL ((void *)0)
#endif /* __cplusplus */

看起来像 nil 是指向地址0x0的指针。

Looks like nil is a pointer to the address 0x0.

让我们看看 Objective-C编程参考必须说:


将消息发送到nil



在Objective-C中,发送
消息到nil是有效的
在运行时。有几个模式
在Cocoa利用这个
的事实。从
消息返回到nil的值也可能有效:...

Sending Messages to nil

In Objective-C, it is valid to send a message to nil—it simply has no effect at runtime. 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 ,0或 struct ,所有变量初始化为0.哪一个取决于预期的返回类型。在objective-c运行时显式检查 nil 的消息,这意味着它真的很快。

The returned values are either nil, 0 or a struct with all variables initialized to 0. Which one it is depends on the expected return type. There is an explicit check in the objective-c runtime for messages to nil, that means it's really fast.

这3种类型。以下是所有定义:

Those are the 3 types. Here are all the definitions:

#define Nil __DARWIN_NULL   /* id of Nil class */
#define nil __DARWIN_NULL   /* id of Nil instance */
#define NULL __DARWIN_NULL
#define __DARWIN_NULL ((void *)0)

可以看出,它们都完全相同。 Nil nil 由Objective-C, NULL 来自C。

As can be seen, they are all exactly the same. Nil and nil are defined by Objective-C, NULL comes from C.

有什么区别?这只是关于风格。它使代码更具可读性。

What's the difference then? It's only about style. It makes the code more readable.


  • Nil 用作不存在class: Class someClass = Nil

  • nil -existent instance: id someInstance = nil

  • NULL 到不存在的存储器部分: char * theString = NULL

  • Nil is used as a non-existent class: Class someClass = Nil.
  • nil is used as a non-existent instance: id someInstance = nil.
  • NULL is a pointer to a non-existent memory part: char *theString = NULL.

nil 不是一个空对象,而是一个不存在的对象。方法 -getSomeObject 不返回空对象,如果它不存在但返回 nil ,它告诉用户没有对象。

nil isn't an empty object but a non-existent one. A method -getSomeObject doesn't return an empty object if it doesn't exist but returns nil which tells the user that there is no object.

也许这是有道理的:(两者都将编译并运行。)

Maybe this makes sense: (Both would compile and run.)

if (anObject == nil) {   // One cannot compare nothing to nothing,
                         // that wouldn't make sense.

if (anObject) {          // Correct, one checks for the existence of anObject

这篇关于什么描述最好?真的是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆