【问题标题】:how to add opaque types to collections如何将不透明类型添加到集合中
【发布时间】:2009-02-02 18:00:11
【问题描述】:

如何向 cocoa 中的集合添加不透明类型?

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

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

【问题讨论】:

    标签: objective-c cocoa collections


    【解决方案1】:

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

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

    【讨论】:

    • 这不是正确的答案。 CFTypes 可以通过免费桥接直接添加到集合中。查看已接受的答案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2015-10-24
      • 2014-10-03
      • 2019-09-15
      • 2012-05-21
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多