【发布时间】:2009-02-02 18:00:11
【问题描述】:
如何向 cocoa 中的集合添加不透明类型?
我收到了一个编译器警告(显然,因为不透明类型不是对象):
CGColorSpaceRef colorSpace;
NSArray *myArray = [NSArray arrayWithObject:colorSpace];
【问题讨论】:
标签: objective-c cocoa collections
如何向 cocoa 中的集合添加不透明类型?
我收到了一个编译器警告(显然,因为不透明类型不是对象):
CGColorSpaceRef colorSpace;
NSArray *myArray = [NSArray arrayWithObject:colorSpace];
【问题讨论】:
标签: objective-c cocoa collections
您可以使用 NSValue 类将不透明类型包装在对象中。来自here:
一个 NSValue 对象是一个简单的 单个 C 的容器或 Objective-C 数据项。它可以容纳任何 标量类型,例如 int, float 和 char 以及指针, 结构和对象ID。这 此类的目的是允许 要添加的此类数据类型的项目 到集合,例如 NSArray 和 NSSet,它们需要它们的 元素成为对象。 NSValue 对象总是不可变的。
【讨论】:
CoreFoundation 数据类型 (CFTypes) 可以直接添加到集合中。 (需要将它们强制转换为 (id) 以抑制警告。)这称为“免费桥接”。
CGColorSpaceRef colorSpace;
NSArray *myArray = [NSArray arrayWithObject:(id)colorSpace];
【讨论】: