如何向集合添加不透明类型

时间:2009-02-02 18:00:12

标签: objective-c cocoa collections

如何在cocoa中为集合添加opaque类型?

我收到了编译器警告(显然,因为opaque类型不是对象):

CGColorSpaceRef colorSpace;
NSArray *myArray = [NSArray arrayWithObject:colorSpace];

2 个答案:

答案 0 :(得分:3)

您可以使用NSValue类将不透明类型包装在对象中。来自here

  

NSValue对象很简单   单个C或容器   Objective-C数据项。它可以容纳任何   标量类型,如int,   float,char,以及指针,   结构和对象id。该   这个课程的目的是允许   要添加的此类数据类型的项目   到诸如实例之类的集合   NSArray和NSSet,需要他们的   元素是对象。 NSValue   对象总是不可变的。

答案 1 :(得分:0)

CoreFoundation数据类型(CFTypes)可以直接添加到集合中。 (他们需要被强制转换为(id)来抑制警告。)这被称为“免费桥接”。

CGColorSpaceRef colorSpace;
NSArray *myArray = [NSArray arrayWithObject:(id)colorSpace];