版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.02.01 |
前言
與Foundation框架不同的是谈秫,
Core Foundation
框架(CoreFoundation.framework)
是一組C語言接口飒房,它們?yōu)閕OS應用程序提供基本數據管理和服務功能。接下來幾篇我們一起重新審視和詳細的看一下這個框架。感興趣的可以看上面寫的幾篇。
1. CoreFoundation框架詳細解析(一) —— 基本概覽
2. CoreFoundation框架詳細解析(二) —— 簡介
Opaque Types - 不透明類型
Core Foundation的支持封裝和多態(tài)函數的對象模型是基于不透明類型的。
基于不透明類型的對象的各個字段對客戶端是隱藏的秘案,但類型的函數提供對這些字段的大部分值的訪問。 圖1描述了它“ hides”
的數據中的一個不透明類型潦匈,以及它呈現給客戶端的界面阱高。
注意:“Class”不是用來指不透明的類型,因為盡管類和不透明類型在概念上相似历等,許多人可能會覺得這個詞很混亂讨惩。 但是,Core Foundation文檔經常將這些類型的特定數據承載實例稱為“objects”寒屯。
Core Foundation有許多不透明的類型荐捻,這些類型的名稱反映了它們的預期用途。 例如寡夹,CFString是一個不透明的類型处面,用于表示Unicode字符數組,并對其進行操作菩掏。 (“CF”當然是Core Foundation的前綴魂角。)CFArray是基于索引的集合函數的不透明類型。 支持不透明類型的函數智绸,常量和其他輔助數據類型通常在具有類型名稱的頭文件中定義野揪;例如,CFArray.h
包含CFArray類型的符號定義瞧栗。
Advantages of Opaque Types - 不透明類型的優(yōu)勢
對于某些情況來說斯稳,不透明的類型可能會阻止直接訪問結構的內容,從而造成不必要的限制迹恐。也有可能會有不明朗的類型的開銷挣惰,可能會影響程序的性能。但不透明類型的好處超過了這些看似的限制。
不透明類型為底層功能的實現提供了更好的抽象和更多的靈活性憎茂。通過隱藏結構字段等細節(jié)珍语,Core Foundation可以在這些細節(jié)發(fā)生變化時減少客戶端代碼中可能出現的錯誤。此外竖幔,不透明類型允許優(yōu)化板乙,如果暴露可能會造成混淆。例如赏枚,CFString“正式”表示UniChar
類型的16位字符數組亡驰。但是,CFString可能選擇將ASCII范圍內的一系列字符存儲為8位值饿幅。復制一個不可變的對象可能會(通常會)導致對該對象的共享引用,而不是內存中的兩個單獨的對象(請參閱Memory Management Programming Guide for Core Foundation)戒职。
繼續(xù)使用CFString的例子栗恩,使用不透明類型來存儲字符似乎很重要。但事實證明洪燥,這種存儲的CPU成本并不比使用簡單的C字符數組高很多磕秤,而且存儲成本往往更低。另外捧韵,不透明不一定意味著不透明類型不能直接提供訪問內容的機制市咆。例如,CFString為此提供了CFStringGetCStringPtr
函數再来。
最后蒙兰,你可以在一定程度上定制一些不透明的類型。例如芒篷,集合類型允許您定義用于調用集合中每個成員的函數的回調函數搜变。
后記
本篇已結束,后面更精彩~~~