NSMutableArray
和CFMutableArray
之间的区别是什么?
在哪种情况下我们应该使用其中一种?
答案 0 :(得分:14)
CFMutableArray
和NSMutableArray
是相同类型的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,无需不断转换类型。