统一类型标识符(下文统称UTI)是用一个类型字符串来标识一类实体。UTI通常用于识别文件或者内存数据的格式,并确定目录的分层布局,卷和包。UTI用于声明现有的数据格式或者声明我们程序能够解析的格式。例如在剪贴板中,OS X和iPhone使用UTI的方式来确定数据的格式。Mac程序使用UTI来指明它能够打开的文件类型。
和其他类型识别方案相比,UTI的优势如下:
- UTI是要遵循逻辑命名约定,并且语法是总所周知的。
- UTI与分层相关,比如我们常见的家庭树(想像成一个简单的二叉树)
- 程序可以扩展UTI列表,意思就是说我们可以自己创建新的类型,或者是某些类型的子类型。
UTI使用反向DNS公约
UTI定义的字符串遵循反向DNS的规定。顶级域名(比如com)放在首位,然后是一个或多个子域,最后以代表实际类型的标记结尾。例如,com.apple.application就标识了应用程序。不同的域名只是为了标识UTI所在的层级,并不意味着任何类似的类型分组。
在公开领域的UTI由苹果定义,此举是为了表示通用格式。
UTI中的dyn域是保留的。当没有定义转换为UTI的标识时,它们会自动创建一个UTI兼容包。
UTI在一致性层级中声明
一致性层次结构类似于面向对象编程中的类层次结构。所有在较低层次结构中的类型实例也会在高层结构中存在实例。
一致性层次结构类似于面向对象编程中的类层次结构。所有在较低层次结构中的类型实例也会在高层结构中存在实例。一致性所带来的优势就是可以让我们应用程序能够灵活地声明其兼容类型。程序可以指定其能够处理的类型,并包含相应的子类型。例如public.html
定义的html文本,同时也符合public.text
标识。其他应用程序在打开这个文本文件是自动是打开html文件。
UTI一致性层次结构支持多重继承。大多数UTI可以把它们的一致性信息录入到一个物理UTI中,这个所谓的物理UTI描述了它的物理特性和它们如何去使用数据。
UTI的属性在程序运行期间可以被继承。当需有某一个值是会从当前类开始搜索,然后是它的父类型。