CFMutableArray和NSMutableArray之间的区别?

时间:2009-11-18 05:53:48

标签: iphone objective-c nsmutablearray

NSMutableArrayCFMutableArray之间的区别是什么?

在哪种情况下我们应该使用其中一种?

3 个答案:

答案 0 :(得分:14)

CFMutableArrayNSMutableArray是相同类型的C-和Objective-C-equivalent。它们被认为是“免费桥接”类型对,这意味着您可以将CFMutableArrayRef投射到NSMutableArray*(反之亦然),一切都会正常工作。您将使用其中一个的情况是易用性(您使用C或Objective-C吗?)或与您想要使用的API兼容。查看更多信息here

答案 1 :(得分:1)

在运行时,它们是相同的。它们是相同的,它们是免费的桥接类型 - 您可以安全地(并且有效地)将其中一个投射到另一个。

它们是不同的类型,有不同的/重叠的语言。

CFMutableArrayRef是不透明的C对象接口 NSMutableArray *是Objective-C接口

它们可以自由地互换,区别在于声明一个是指向opaque类型的指针,而不是objc对象。

另外,你可以使用objc(sorta - 它需要比平常更多的实现)子类NSMutableArray类型。

答案 2 :(得分:1)

OSX的API是分层的,有基本的低级API自我组合,然后有更丰富的API构建在它们之上,反过来使用较低级别的API本身。

CFMutableArray是CoreFoundation框架的一部分,由低级API使用。 NSMutableArray(我猜NS代表NextStep)是Foundation框架的一部分,用于更高级别的API,如AppKit或Cocoa。

您应该使用哪种取决于您的工作地点。如果您使用Cocoa在富用户界面中工作,NSMutableArray是正确的选择。如果你正在使用一个守护进程,驱动程序或其他只使用CoreFoundation的东西,请使用CFMutableArray。

幸运的是,如上所述,许多这些CF / NS类型都是免费桥接的,因此您可以使用CoreFoundation API,例如, Cocoa,无需不断转换类型。