对Core Foundation 与 Cocoa Foundation的理解
来源:互联网 发布:联合大学网络学堂 编辑:程序博客网 时间:2024/06/06 08:59
Cocoa Foundation
苹果的官方文档:Cocoa Foundation
Foundation框架定义的是OC类的基础层,它的根是NSObject类,(和NSObject及NSCopying协议一起)定义了基本的对象属性和行为。除了提供一组有用的基本对象类之外,它还引入了一些OC语言不涵盖的功能的范例。Foundation预期实现以下几个功能:
- 提供少量的基本的实用工具类;
- 为了降低开发的难度,引入了一些统一的约定,比如dealloc函数;
- 支持Unicode字符串、对象持久性和对象分布;
- 提供了一个标准的操作系统独立,提高可移植性。
Foundation包括对象类、表示基本数据类型(例如字符串和字节数组)的类、用于存储其他对象的集合类、表示日期等系统信息的类以及表示通信端口的类。Foundation引入了几个范例,以避免在常见情况下的混乱,并在类层次结构中引入一定程度的一致性。这种一致性是通过一些标准策略完成的,例如对象所有权(即,谁负责处理对象)以及抽象类(如NSEnumerator)。这些新的范例减少了API中特殊和异常情况的数量,并允许您通过重复使用与各种对象相同的机制来更有效地编码。
Core Foundation
苹果的官方文档:Core Foundation
Core Foundation是一个具有一组编程接口的库或者框架,概念上源于基于Objective-C的Foundation框架,但是以C语言实现。为此,Core Foundation在C中实现了有限的对象模型。Core Foundation定义了封装数据和函数的不透明类型,以下称为“对象”。Core Foundation对象的编程接口设计为易于使用和重用,起到的作用为:
- 支持在各种框架和库之间共享代码和数据
- 使一定程度的操作系统独立成为可能
- 支持Unicode字符串的国际化
- 提供常见的API和其他有用的功能,包括插件架构,XML属性列表和首选项
Core Foundation使OS X上的不同框架和库可以共享代码和数据。应用程序,库和框架可以定义在其外部接口中并入Core Foundation类型的C例程;因此它们可以通过这些接口将数据(作为Core Foundation对象)传递给彼此。
Core Foundation 还提供指定服务与Core Foundation之间的““toll-free bridging”(可译为:免费桥接)。免费桥接使您可以将Cocoa对象替换为Core Foundation对象的函数参数,反之亦然。一些Core Foundation的类型和功能是在不同操作系统上具有相同的映射。因此使用这些API的代码更容易移植到不同的平台上。日期和数字类型抽象时间工具,并提供在绝对和公历时间之间进行转换的设施。它还抽象数值,并提供了在这些值的不同内部表示之间进行转换的工具。
Core Foundation为应用程序开发带来的主要优点之一是国际化支持。通过其String对象,Core Foundation可以在所有OS X和Cocoa编程接口和实现之间实现轻松,强大和一致的国际化。此支持的基本部分是CFString类型,其实例表示16位Unicode字符数组。 CFString对象具有足够的灵活性,可以容纳数兆字节的字符,而且简单而低级,足以用于传送字符数据的所有编程接口。它的性能与标准C字符串的性能没有太大的不同。
需要注意的是:
Core Foundation框架的函数是基于C语言的封装,在现行的ARC是不能自动管理这些(以CF开头的框架)引用计数的,因此,在实际开发中如果有使用到Core Foundation框架的对象,需要我们手动来管理内存,例如下边代码:使用了一个CFRelease函数来手动释放创建的观察者(defaultModelObserver)
//用Core Foundation注册一个Runloop的观察者-(void)addRunloopObserver{ //获取当前RunLoop CFRunLoopRef runloop = CFRunLoopGetCurrent(); //定义一个上下文 CFRunLoopObserverContext context = { 0, (__bridge void *)(self), &CFRetain, &CFRelease, NULL, }; //定义一个观察者 static CFRunLoopObserverRef defaultModeObserver; //创建观察者 defaultModeObserver = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting, YES, NSIntegerMax - 999, &Callback, &context); //添加当前RunLoop的观察者 CFRunLoopAddObserver(runloop, defaultModeObserver, kCFRunLoopDefaultMode); //C语言里面有Creat\new\copy 就需要 释放 ARC 管不了!! CFRelease(defaultModeObserver); }
除了以CF开头的,凡是带有Ref结尾的对象,都是基于Core Foundation的封装,也可以说是基于C语言的封装,比如获取通讯录的对象:ABAddressBookRef、CGContextRef。
- 对Core Foundation 与 Cocoa Foundation的理解
- Core Foundation 与 cocoa Foundation框架区别
- Core Foundation 与 foundation
- Core Foundation与Foundation
- OC基础---Core Foundation和Cocoa Foundation
- cocoa core foundation内存管理
- Core Foundation(C对象)与 Foundation(OC对象)之间的转换 理解
- Core Foundation(C对象)与 Foundation(OC对象)之间的转换 理解
- Core Foundation(C对象)与 Foundation(OC对象)之间的转换 理解
- Foundation框架与Core Foundation框架相互之间的桥接
- IOS之Core Foundation框架和Cocoa Foundation框架区别
- IOS之Core Foundation框架和Cocoa Foundation框架区别
- IOS之Core Foundation框架和Cocoa Foundation框架区别
- core foundation与objective-c的区别
- Core Foundation
- Foundation对象与Core Foundation对象间的转换:Toll-Free Birdge
- Foundation对象与Core Foundation对象如何转换
- OC对象与Core Foundation对象的转换
- redis存储和查询的java实现
- pci_init_capabilities的pci_msi_setup_pci_dev和pci_allocate_cap_save_buffers
- ZedBoard Vivado 自定义IP流水灯
- 智能指针 AutoPtr ScopedPtr SharedPtr
- Windows下的php代码上传到Linux出现换行符无法识别
- 对Core Foundation 与 Cocoa Foundation的理解
- android 线程池
- 程序断点(program breakpoint)和数据断点(data breakpoint)
- Python解析json到sql语句
- Jquery获取和修改img的src值的方法
- mysql 文本类型的长度
- CSS 3动画
- 中断简介
- 远程调用jenkis操作的一些API