带有C类型的NSArray?

Eri*_*rik 2 iphone objective-c

我想知道是否可以使用带有C类型的NSArray/NSMuatbleArray作为元素,即CGLayerRef?

如果将CGLayerRef对象添加到NSMutableArray,则代码会编译,但会抛出警告:

警告:传递'objectForKey:'的参数1使得整数指针没有强制转换

因此我的问题是:如何在可变数组中存储C类型?

最好,

海因里希

Ken*_*Ken 9

这是一个多部分的答案.最后,答案就是"你可以做到这一点".

(1)NSArray无法处理一般的C类型.如果你对这种事情感兴趣,CFArray可以配备自定义回调来存储其他类型的数据.警告:通常你可以将CFArray传递给任何采用API的NSArray - 它们是桥接的.这不适用于具有自定义回调的CFArrays.

(2)CGLayerRef不是任何旧的C类型,它是CFType.CFType与NSObject桥接.发送-retain-release任何CFType的工作方式与在NSObject上的工作方式相同.如果您要在NSObject实现上放置一个类别-foo,然后将一些随机CFType转换为id并向其发送-foo消息,您将看到您foo调用的实现.

所以,这里的编译器警告是唯一的问题.您可以强制转换为(id)以避免它.所有这一切都得到了支持.

肯渡口

可可框架


nal*_*all 8

看看NSValue

NSValue对象是单个C或Objective-C数据项的简单容器.它可以包含任何标量类型,如int,float和char,以及指针,结构和对象id.此类的目的是允许将此类数据类型的项添加到集合中,例如NSArray和NSSet的实例,这些集合要求其元素为对象.NSValue对象始终是不可变的.