NSMutableArray
和 和有什么不一样CFMutableArray
?
在哪种情况下我们应该使用其中一种?
CFMutableArray
并且NSMutableArray
是相同类型的 C 和 Objective-C 等价物。它们被认为是“免费桥接”类型对,这意味着您可以将 aCFMutableArrayRef
转换为 a NSMutableArray*
(反之亦然),一切都会正常工作。您将使用其中一种的情况是易于使用(您使用的是 C 还是 Objective-C?)或与您想要使用的 API 的兼容性。在此处查看更多信息。
在运行时,它们是相同的。它们是相同的,它们是免费的桥接类型 - 您可以安全(有效地)将一个转换为另一个。
它们是不同的类型,以不同/重叠的语言提供。
CFMutableArrayRef 是不透明的 C 对象接口 NSMutableArray * 是 Objective-C 接口
它们可以自由互换,不同之处在于声明一个是指向不透明类型的指针,而不是一个 objc 对象。
此外,您可以(排序 - 它需要比平常更多的实现)使用 objc 子类 NSMutableArray 类型。
OSX 的 API 是分层的,有基本的低级 API 是自包含的,然后有更丰富的 API 构建在它们之上,进而使用低级 API 本身。
CFMutableArray 是 CoreFoundation 框架的一部分,由较低级别的 API 使用。NSMutableArray(我猜 NS 代表 NextStep)是 Foundation 框架的一部分,用于更高级别的 API,如 AppKit 或 Cocoa。
您应该使用哪个取决于您在哪里工作。如果您使用 Cocoa 在丰富的用户界面中工作,那么 NSMutableArray 是正确的选择。如果您正在使用 CoreFoundation 开发守护程序、驱动程序或其他任何东西,请使用 CFMutableArray。
幸运的是,如上所述,许多这些 CF/NS 类型是免费桥接的,因此您可以使用来自例如 Cocoa 的 CoreFoundation API,而无需不断地转换类型。