有人對「不透明類型」是什麼有很好的解釋嗎?我在CFBundleRef
的範圍內看到了這個術語,他們在這裏說:「CFBundleRef不透明類型」。這是隻讀的類型嗎?術語「不透明類型」在「CFBundleRef不透明類型」的上下文中是什麼意思?
28
A
回答
67
「不透明類型」是指您沒有struct
或class
的完整定義的類型。在C,C++和Objective-C,你可以告訴一個類型將通過使用預先聲明後面定義編譯:
// forward declaration of struct in C, C++ and Objective-C
struct Foo;
// forward declaration of class in C++:
class Bar;
// forward declaration of class in Objective-C:
@class Baz;
編譯器沒有足夠的信息來讓你直接用做任何事struct
或class
除了聲明它的指針,但這往往是你所需要做的。這允許庫和框架創建者隱藏實現細節。圖書館或框架的用戶然後調用助手函數來創建,操縱和銷燬宣稱爲struct
或class
的轉發的實例。舉例來說,一個框架的創建者可以爲struct Foo
實現這些功能:
struct Foo *createFoo(void);
void addNumberToFoo(struct Foo *foo, int number);
void destroyFoo(struct Foo *foo);
爲核心的基礎架構的一部分,蘋果都會在平凡的Objective-C類似NSString
,NSArray
和NSBundle
可通過不透明類型的C程序員。 C程序員使用指針和輔助函數來創建,操作和銷燬這些Objective-C類的實例。蘋果稱這種「免費橋接」。它們遵循一個通用的命名約定:「CF」前綴+類名+「Ref」後綴,其中「CF」代表「Core Foundation」,「Ref」代表「Reference」,表示它是一個指針。
13
不透明類型是一種「包裝」低級類型的類型,當底層實現很複雜時,或者用戶根本不需要知道內部運作時,經常使用它。蘋果對不透明類型的一個很好的頁面在這裏:
例如,CFString字符串是一個不透明的類型,因爲它封裝了一個字符數組,維持其長度,其編碼等,但不直接讓用戶訪問這些值。而是提供訪問或操作內部字段並向用戶返回相關信息的方法。
2
這是一個未來申報的結構。例如:
typedef struct CFBundle *CFBundleRef;
沒有「struct CFBundle」的實際定義,您的代碼無法訪問CFBundleRef指針內的任何內容。這是不透明的。
相關問題
- 1. 你的意思是不透明類型的課程?
- 2. 採用不透明類型的NSSecureCoding
- 3. CGColorRef對象的ID不透明類型
- 4. 什麼`... |類型聲明中的b - > c是什麼意思?
- 5. 石英2D不透明數據類型
- 6. 使用不透明類型(Char和Long)
- 7. C#中透明類或透明方法是什麼?
- 8. 什麼是「不透明」鍵?
- 9. 什麼是榆樹中的不透明類型,爲什麼它很有價值?
- 10. Eclipse文件夾是透明/灰色的。這是什麼意思?
- 11. 在VALUES類型說明符中,&OPTIONAL和&REST是什麼意思?
- 12. 不透明列時出現類型轉換錯誤,爲什麼?
- 13. 「聲明中的重複數據類型」是什麼意思?
- 14. 的子類透明型與在Silverlight
- 15. 需要透明類型的好處和情況是什麼?
- 16. 透明div上的不透明字體
- 17. Canvas上下文的stroke()使透明邊框,而不是完全不透明?
- 18. Android的透明圖片不是透明
- 19. 函數調用前面的類型聲明是什麼意思
- 20. 透明PNG在LWJGL中不透明
- 21. 透明圖像在IE中不透明
- 22. 聲明DTD元素類型時,「 - O」是什麼意思?
- 23. 在pygame中堆疊不同類型的透明度
- 24. Elasticsearch中的「類型」是什麼意思?
- 25. 什麼是不透明的字段?
- 26. 順差是透明,同時使用PNG透明和不透明
- 27. WPF中透明的不透明元素
- 28. 如何在透明度上獲取不透明的文本div?
- 29. 類型與不透明指令在erlang中
- 30. 隱藏在透明NSWindow中的不透明NSView留下陰影
非常令人印象深刻的好回答!謝謝!! – Thanks 2009-04-10 10:39:31