2013-12-14 39 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' –