3

NSMutableArray和 和有什么不一样CFMutableArray

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

4

3 回答 3

14

CFMutableArray并且NSMutableArray是相同类型的 C 和 Objective-C 等价物。它们被认为是“免费桥接”类型对,这意味着您可以将 aCFMutableArrayRef转换为 a NSMutableArray*(反之亦然),一切都会正常工作。您将使用其中一种的情况是易于使用(您使用的是 C 还是 Objective-C?)或与您想要使用的 API 的兼容性。在此处查看更多信息。

于 2009-11-18T06:06:52.170 回答
1

在运行时,它们是相同的。它们是相同的,它们是免费的桥接类型 - 您可以安全(有效地)将一个转换为另一个。

它们是不同的类型,以不同/重叠的语言提供。

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

它们可以自由互换,不同之处在于声明一个是指向不透明类型的指针,而不是一个 objc 对象。

此外,您可以(排序 - 它需要比平常更多的实现)使用 objc 子类 NSMutableArray 类型。

于 2009-11-18T07:55:09.487 回答
1

OSX 的 API 是分层的,有基本的低级 API 是自包含的,然后有更丰富的 API 构建在它们之上,进而使用低级 API 本身。

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

您应该使用哪个取决于您在哪里工作。如果您使用 Cocoa 在丰富的用户界面中工作,那么 NSMutableArray 是正确的选择。如果您正在使用 CoreFoundation 开发守护程序、驱动程序或其他任何东西,请使用 CFMutableArray。

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

于 2009-11-18T12:03:06.723 回答