版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.02.01 |
前言
与Foundation框架不同的是,
Core Foundation
框架(CoreFoundation.framework)
是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。接下来几篇我们一起重新审视和详细的看一下这个框架。感兴趣的可以看上面写的几篇。
1. CoreFoundation框架详细解析(一) —— 基本概览
2. CoreFoundation框架详细解析(二) —— 简介
3. CoreFoundation框架详细解析(三) —— 不透明类型
4. CoreFoundation框架详细解析(四) —— 对象引用
5. CoreFoundation框架详细解析(五) —— 多态函数
6. CoreFoundation框架详细解析(六) —— 对象的种类
Naming Conventions - 命名约定
Core Foundation中的主要编程接口约定是使用与符号最相关的不透明类型的名称作为符号的前缀。 对于函数,这个前缀不仅标识函数“属于”的类型,而且标识函数的目标类型。 (这个约定的一个例外是常量,它在类型前缀之前加上“k”)。下面是头文件中的几个例子:
/* from CFDictionary.h */
CF_EXPORT CFIndex CFDictionaryGetCountOfKey(CFDictionaryRef dict, const void *key);
/* from CFString.h */
typedef UInt32 CFStringEncoding;
/* from CFCharacterSet.h */
typedef enum {
kCFCharacterSetControl = 1,
kCFCharacterSetWhitespace,
kCFCharacterSetWhitespaceAndNewline,
kCFCharacterSetDecimalDigit,
kCFCharacterSetLetter,
kCFCharacterSetLowercaseLetter,
kCFCharacterSetUppercaseLetter,
kCFCharacterSetNonBase,
kCFCharacterSetDecomposable,
kCFCharacterSetAlphaNumeric,
kCFCharacterSetPunctuation,
kCFCharacterSetIllegal
} CFCharacterSetPredefinedSet;
除了与不透明类型和内存管理有关的编程接口约定外,Core Foundation还有一些编程接口约定。
在Get,Copy和Create之间有一个重要的区别,在返回值的函数的名字中。如果使用Get函数,则不能确定返回的对象的生命周期。为了确保这个对象的持久性,可以保留它(使用
CFRetain
函数),或者在某些情况下复制它。如果使用Copy
或Create
函数,则负责释放对象(使用CFRelease
函数)。有关更多详细信息,请参阅Memory Management Programming Guide for Core Foundation。-
一些Core Foundation对象有其自己的命名约定来强化常见操作之间的一致性。例如,集合将以下动词嵌入到函数名称中,以表示对集合元素的特定操作:
-
“Add”
的意思是“如果不存在,则添加”,如果存在则不做任何处理(如果是一个uniquing集合)。 -
“Replace”
的意思是“如果存在,则替换,如果不存在则不做任何事情”。 -
“Set”
的意思是“如果不存在则添加,如果存在则更换”。 -
“Remove”
的意思是“如果存在,则删除”,如果没有,则不做任何事情。
-
CFIndex
类型用于索引,计数,长度和大小参数以及返回值。这个类型所表示的整数值(当前为32位)随着处理器的地址大小的增长可以随时间增长。在指针大小不同的体系结构(比如64位)上,CFIndex可能被声明为64位,与int的大小无关。通过将CFIndex用于与相同类型的Core Foundation参数交互的变量,可以确保代码具有更高的源代码兼容性。一些Core Foundation头文件似乎可以定义不透明类型,但实际上包含了与特定类型不相关的便利函数。一个恰当的例子是
CFPropertyList.h
。 CFPropertyList是任何属性列表类型的占位符类型:CFString,CFData,CFBoolean,CFNumber,CFDate,CFArray和CFDictionary
。除非另外指定,否则所有用于返回值的引用参数都可以接受
NULL
。这表明调用者对该返回值不感兴趣。
后记
本篇已结束,后面更精彩~~~