2013-12-14 36 views
0

我有一些关于Objective C的基本知识,以及如何声明和使用Struct以及如何使用Typedef来更容易地调用Struct,但是我看到很多奇怪的复杂结构用法和声明不知道。以下是其中之一,其在“CFUUID.h”类中定义的基础框架基础框架中的结构声明

typedef const struct __CFUUID * CFUUIDRef; 

可有人请解释一下是怎么回事,这不是通常的方式根据定义一个struct我迄今已阅读。 所以这意味着这个结构将会是一个常量,以后不能改变? 是struct _CFUUID的名字? 为什么需要这个指针,这个typedef和指针有什么关系呢?

回答

2

我认为这是没有C教程。无论如何一个简短的答案。

  1. 它没有定义结构。它是一种类型的定义(typedef)。

  2. 类型定义类似于别名:标识符(CFUUIDRef)代表前面提到的类型。 (const struct __CFUUID * aka指向标识为__CFUUID的结构的指针)。

  3. 类型定义有几个优点:

    • 它使得代码更短,更具有可读性。

    • 它封装了信息(就像类一样)。例如,可以在不破坏现有代码的情况下更改“真实”类型,该代码仅在CFUUIDRef而不是其内部定义上继电器。 (这就是为什么你不应该问,struct __CFUUID是什么,他们不希望你问这是个秘密。)

    • 如果这个类型是另一个构造的一部分,它会使事情变得更容易。 (即阵列)

  4. 是的,const使它保持不变。没有人应该更改UUID。

  5. 使用指针给出了另一个间接级别。这具有许多优点。另外传递一个指针(1个CPU字)比复制整个结构(2或4个CPU字)要快。

+0

不,这将是'结构__CFUUID * const的CFUUIDRef' –