Tag: core foundation

何时使用__bridge,__bridge_transfer / CFBridgingRelease和__bridge_retained / CFBridgingRetain

由于Cocoa / CocoaTouch框架几乎可以处理所有带有高级API的内容,因此在该块中的新孩子发现“桥接”有点困惑。 这是一些基本知识。 什么是Core Foundation API和Foundation API? Core Foundation API用C编写。FoundationAPI用Objective-C编写。 Foundation API以更抽象的方式提供了比Core Foundation更多的功能。 关于这一发展的简史…苹果于1996年收购了NeXT。然后OSX从Mac OS 9和NeXT的OpenStep演变而来。 OpenStep是在Objective-C中开发的,并演变为Cocoa框架。 Foundation API是此Cocoa框架的一部分。 什么是“免费桥接”又称“桥接”? Core Foundation框架和Foundation框架中有许多数据类型可以互换使用。 可以互换使用的数据类型也称为免费桥接数据类型。 这意味着您可以使用与Core Foundation函数调用的参数相同的数据结构,也可以将其用作Objective-C消息调用的接收者。 例如,NSLocale可以与其核心基金会对应的CFLocale互换。 并非所有的数据类型都是免费的桥接,即使它们的名称可能暗示它们是免费的。 例如,NSRunLoop不是免费连接到CFRunLoop,NSBundle不是免费连接到CFBundle,NSDateFormatter不是免费连接到CFDateFormatter。 可以在CoreFoundation和Foundation之间互换使用的数据类型列表 Core Foundation API中的函数命名约定(创建/复制规则) 如果Core Foundation函数包含单词“ Create”或“ Copy”,则说明您拥有该对象。 也就是说,您是该对象的所有者。 一旦完成该对象的处理,便有责任释放(释放)该对象。 ARC将无法处理Core Foundation对象。 __bridge用于在Core Foundation和无所有权的Foundation之间转移/转换指针。 __bridge_transfer或CFBridgingRelease用于通过所有权转移将指针从Core Foundation转移/转换到Foundation。 在这种情况下,无需显式释放CF对象。 转换后的对象将由ARC发布 __bridge_retained或CFBridgingRetained用于通过所有权转移将指针从Foundation转移/转换为CoreFoundation。 在这种情况下,您有责任释放转换后的对象

如何在C / Objective C中实现位数组

iOS / Objective-C:我有一个大数组布尔值。 这是存储这些值的低效方式 – 当只需要一个元素时,每个元素至less使用八位。 我怎样才能优化?