雏鸟(1)--Foundation

一、Foundation.framework目录
    1、    IOS目录  
    $1   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/Foundation.framework
    $2   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/Foundation.framework
    2、 mac目录
    $3  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework
    $4   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Foundation.framework

一、Foundation 框架 逻辑功能分布
    1、值对象。值对象封装了各种类型的数据,提供对数据进行访问和各种操作的途径。因为它们都是对象,所以可以对它们(和它们包含的数值)进行归档和分发。NSData 类为字节流提供面向对象的存储空间,而 NSValue 和 NSNumber 类则为简单的标量值数组提供面向对象的存储空间。NSDate、NSCalendarDate、NSTimeZone、NSCalendar、NSDateComponents、和 NSLocale 类提供代表时间、日期、日历、和地域设置(locales)的对象。它们包含的方法可以用于计算日期和时间差、以各种格式显示日期和时间、以及调整世界上各个位置时间和日期。
                
      2、字符串。NSString 是另一类值对象,负责为以 null 结尾的、具有特定编码的字节数组提供面向对象的存储空间。它支持对 UTF-16、UTF-8、MacRoman、和很多其它编码的字符串之间进行转换。NSString 还提供对字符串进行检索、组合、和比较、以及对文件系统路径进行操作的方法。您可以 用 NSScanner 对象来对NSString 对象中的数字和词进行解析。NSCharacterSet(显示在框图中的集合类部分)代表可以在各个 NSString 和 NSScanner 方法中使用的一组字符。

    3、集合。集合是以一定的顺序存储和访问其它对象(通常是数值)的对象。NSArray 的索引从 0 开始,NSDictionary 使用键-值对,而 NSSet 则负责对象的随机存储(NSCountedSet 类使集合具有唯一标识)。通过 NSEnumerator 对象,您可以访问一个集合中的元素序列。集合对象是属性列表的必要元素,和其它所有对象一样,它也可以被归档和分发。
                        

    4、操作系统服务。 很多 Foundation 类为访问各种底层的操作系统服务提供便利,同时又把开发者从操作系统的具体特性隔离开来。举例来说,您可以通过 NSProcessInfo 类查询应用程序运行的环境;通过 NSHost 类得到主机系统在网络中的名称和地址;通过 NSTimer 对象,您可以按指定的时间间隔向其它对象发送消息;NSRunLoop 可以帮您管理应用程序或其它类型程序的输入源;而NSUserDefaults 则为存储全局(主机级别)和用户级缺省值(预置)的系统数据库提供编程接口。

    5、文件系统和 URL。 NSFileManager 为诸如创建、重命名、删除、和移动文件这样的文件操作提供统一的接口。NSFileHandle 则可以进行较为底层的文件操作(比如文件内查找操作)。NSBundle 可以寻找存储在程序包中的资源,可以动态装载某些资源(比如 nib 文件和代码)。您可以用 NSURL 和 NSURLHandle 类来表示、访问、和管理源于 URL 的数据。

    6、 进程间通讯。 这个范畴中的大部分类代表不同的系统端口、套接字、和名字服务器,对实现底层的 IPC 很有用。NSPipe 代表一个 BSD 管道,即一种进程间的单向通讯通道。

    7、 线程和子任务。 NSThread 类使您可以创建多线程的程序,而各种锁(lock)类则为彼此竞争的线程在访问进程资源时提供各种控制机制。通过 NSTask,您的程序可以分出一个子进程来执行其它工作或进行进度监控。

    8、 通告。请见 "Foundation的范式和策略"部分中的有关通告类总结。


    9、归档和序列化。这个范畴中的类使对象分发和持久保留成为可能。NSCoder 及其子类和 NSCoding, 协议一起,可以以独立于架构的方式来表示对象中包含的数据,可以将类信息和数据一起存储。   
                    
   10、表达式和条件判断。
       条件判断类,即 NSPredicate、NSCompoundPredicate、和NSComparisonPredicate 类,负责对获取或过滤对象的逻辑约束条件进行封装。NSExpression对象则代表条件判断中的表达式。            
                                                            
 
   11、Objective-C 语言服务
        NSException  类为代码中的断言和例外处理提供了面向对象的封装。NSInvocation 对象是 Objective-C 消息的静态表示,您的程序可以对它存储,并在之后用于激活另一个对象的消息。undo 管理器(NSUndoManager)和分布式对象(DistributedObjects)系统都用到了这种对象。NSMethodSignature 对象负责记录方法的类型信息,可以用于信息的推送。NSClassDescription 则是一个抽象类,用于定义和查询类的关系和属性。 

    12、 脚本。这个范畴中的类可以帮助您实现对 AppleScript 脚本和 Apple Event 命令的支持 


    13、分布式对象。 您可以通过分布式对象类来进行同一台电脑或一个网络中的不同电脑上的进程间通讯。其中的两个类-NSDistantObject 和 NSProtocolChecker 的根类(NSProxy)和 Cocoa 其它部分的根类不同。
                         
    14、网络。NSNetService 类支持称为 Bonjour 的零配置网络架构。Bonjour是在 IP 网络上发布和浏览服务的强大系统。
                        
二 、Fuoundation.h分析

    $1 分析

复制代码
/* Foundation.h Copyright (c) 1994-2012, Apple Inc. All rights reserved.
*/

#include <CoreFoundation/CoreFoundation.h>  core框架基本应用入口文件            (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功          ARC仅管理Objective-C指针(retain、release、autorelease),不管理CoreFoundation指针,CF指针由人工管理,手动的CFRetain和CFRelease来管理,注,CF中没有autorelease。
  CocoaFoundation指针与CoreFoundation指针转换,需要考虑的是所指向对象所有权的归属。ARC提供了3个修饰符来管理。
  1. __bridge,什么也不做,仅仅是转换。此种情况下:
    i). 从Cocoa转换到Core,需要人工CFRetain,否则,Cocoa指针释放后, 传出去的指针则无效。
    ii). 从Core转换到Cocoa,需要人工CFRelease,否则,Cocoa指针释放后,对象引用计数仍为1,不会被销毁。
  2. __bridge_retained,转换后自动调用CFRetain,即帮助自动解决上述i的情形。
  2. __bridge_transfer,转换后自动调用CFRelease,即帮助自动解决上述ii的情形

#import <Foundation/NSObjCRuntime.h>   大量宏定义
#import <Foundation/NSArray.h>      NSArray不可变数组,保存的对象可以是不同的对象。但只能保存对象
#import <Foundation/NSAutoreleasePool.h>   对CoCoa引用计数内存处理
#import <Foundation/NSBundle.h>   bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in)
#import <Foundation/NSByteOrder.h>  little endian and bit endian 字节序处理,   所谓的Little-Endian,就是我们在学习汇编时候的高高低低原则,应用于i386PC的CPU中,而Bit-Endian就是刚刚相反,应用于MAC机器中
#import <Foundation/NSCalendar.h>  日历处理
#import <Foundation/NSCharacterSet.h>   NSCharacterset是无序字符集合,主要用来判断已知字符串是否包含制定字符集,而不可以用来保存字符串
#import <Foundation/NSCoder.h>  对象编码和解码
#import <Foundation/NSData.h>  不变缓冲区处理
#import <Foundation/NSDate.h>  NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等
#import <Foundation/NSDateFormatter.h>  NSDateFormatter 时间格式化
#import <Foundation/NSDecimal.h>  
#import <Foundation/NSDecimalNumber.h>  NSDecimal是个结构体,NSDecimalNumber是个对象, 小数点处理
#import <Foundation/NSDictionary.h>   不可变词典
#import <Foundation/NSEnumerator.h>  集合类(如:NSArray、NSSet、NSDictionary等)均可获取到NSEnumerator, 该类是一个抽象类,没有用来创建实例的公有接口
#import <Foundation/NSError.h>  错误信息处理
#import <Foundation/NSException.h>  异常处理基类
#import <Foundation/NSFileHandle.h> NSFileHandle类是一个针对文件描述符的面向对象封装类。可以使用文件处理对象来访问与文件、sockets、管道pipes和设备相联系的数据
#import <Foundation/NSFileManager.h>  NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)
#import <Foundation/NSFormatter.h>  NSFormatter是一个抽象类,系统提供二个子类NSNumberFormatter 和NSDateFormatter
#import <Foundation/NSHashTable.h> 弱引用的无序对象集合
#import <Foundation/NSHTTPCookie.h>  NSHTTPCookie对象代表一个HTTP cookie。 这是一个不可改变的对象
#import <Foundation/NSHTTPCookieStorage.h> NSHTTPCookieStorage实现管理共享的cookie存储一个singleton对象(共享实例)。 这些cookies是所有的应用程序之间的共享和跨进程同步保存
#import <Foundation/NSIndexPath.h> 它提供了到嵌套数列的树中特定节点的路径
#import <Foundation/NSIndexSet.h>  NSIndexSet 用来让你从某个 整数阵列 里面提取一部分数据组成新的阵列
#import <Foundation/NSInvocation.h>  消息转发
#import <Foundation/NSJSONSerialization.h>   对象和JSON互相转化
#import <Foundation/NSKeyValueCoding.h>       KVC键-值-编码
#import <Foundation/NSKeyValueObserving.h>  KVO键-值-监察
#import <Foundation/NSKeyedArchiver.h>  归档处理,将任意的对象集合转换为字节流
#import <Foundation/NSLocale.h>   获取用户的区域信息 
#import <Foundation/NSLock.h>  简单的互斥锁
#import <Foundation/NSMapTable.h> 弱引用的NSDictionary集合
#import <Foundation/NSMethodSignature.h> 创建NSInvocation对象需要使用NSMethodSignature对象,该对象负责封装与方法参数和返回值有关系的信息
#import <Foundation/NSNotification.h> 通知处理
#import <Foundation/NSNotificationQueue.h>  NSNotificationQueue对象(或者简单称为通告队列)的作用是充当通告中心(NSNotificationCenter的实例)的缓冲区
#import <Foundation/NSNull.h> 空值集合处理
#import <Foundation/NSNumberFormatter.h>  数字格式化处理
#import <Foundation/NSObject.h>  根类,提供基本运行能力的接口
#import <Foundation/NSOperation.h>  多线程操作
#import <Foundation/NSOrderedSet.h>  有序集合
#import <Foundation/NSOrthography.h> 通常用于描述语言的内容
#import <Foundation/NSPathUtilities.h> 路径处理
#import <Foundation/NSPointerArray.h>弱引用的可变NSArray集合
#import <Foundation/NSPointerFunctions.h>    标注,指针引用管理
#import <Foundation/NSPort.h>   处理管道通信抽象类
#import <Foundation/NSProcessInfo.h> 返回当前进程的信息
#import <Foundation/NSPropertyList.h> 属性列表
#import <Foundation/NSProxy.h> 代理抽象类
#import <Foundation/NSRange.h> 截取字符串或者数组
#import <Foundation/NSRegularExpression.h> 正则处理
#import <Foundation/NSRunLoop.h>  NSRunLoop是一种更加高明的消息处理模式用于监控的input sources和timers以及一组用于通知的run loop observers
#import <Foundation/NSScanner.h> 字符串扫描仪
#import <Foundation/NSSet.h> 有序集合
#import <Foundation/NSSortDescriptor.h>  数组排序处理
#import <Foundation/NSStream.h> 抽象流对象
#import <Foundation/NSString.h> 字符串处理
#import <Foundation/NSTextCheckingResult.h>  代表各种链接,时间地址电话网址自定义等
#import <Foundation/NSThread.h> 线程处理
#import <Foundation/NSTimeZone.h>   时区转换
#import <Foundation/NSTimer.h> 定时器处理
#import <Foundation/NSURL.h>  URL处理
#import <Foundation/NSURLAuthenticationChallenge.h> 封装了客服端到服务证书处理
#import <Foundation/NSURLCache.h>URL缓存处理
#import <Foundation/NSURLConnection.h>  URL连接创建和弃用处理
#import <Foundation/NSURLCredential.h>  URL身份验证信息数据处理
#import <Foundation/NSURLCredentialStorage.h>  URL身份验证信息存储处理
#import <Foundation/NSURLError.h> URL错误处理
#import <Foundation/NSURLProtectionSpace.h>   身份认证处理
#import <Foundation/NSURLProtocol.h>  URL协议处理抽象类
#import <Foundation/NSURLRequest.h>  URL资源加载处理
#import <Foundation/NSURLResponse.h>  访问HTTP协议具体响应处理
#import <Foundation/NSUserDefaults.h> NSUserDefaults对象是存储数据量小的数据
#import <Foundation/NSValue.h> 用来存储一个C或者Objective-C数据的简单容器
#import <Foundation/NSValueTransformer.h>  自定义数据类型转化处理抽象类
#import <Foundation/NSXMLParser.h> xml 处理
#import <Foundation/NSZone.h>   内存分配和释放的优化方式


#import <Foundation/FoundationErrors.h>

系统环境判断定义  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/TargetConditionals.h
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)

#import <Foundation/NSAttributedString.h> 字符串显示的多样化
#import <Foundation/NSByteCountFormatter.h>  字节计数值单位格式化
#import <Foundation/NSCache.h>  缓存处理,强引用,存储于内存
#import <Foundation/NSComparisonPredicate.h>  负责对获取或过滤对象的逻辑约束条件进行封装
#import <Foundation/NSCompoundPredicate.h> 负责对获取或过滤对象的逻辑约束条件进行封装
#import <Foundation/NSExpression.h> 代表条件判断中的表达式
#import <Foundation/NSFileCoordinator.h>
#import <Foundation/NSFilePresenter.h> NSFileCoordinator和NSFilePresenter类可以让你的文件对峙完整和最新
#import <Foundation/NSFileVersion.h> 某文件的特定时间的快照,可以用于解决版本冲突
#import <Foundation/NSFileWrapper.h> 创建与磁盘文件或目录对应的对象。将文件的内容保存在内存中,进行显示修改以及传递给其他程序
#import <Foundation/NSLinguisticTagger.h> 语言taging,给语言文字做各种标签和分析#import <Foundation/NSMetadata.h> 文件相关的元数据
#import <Foundation/NSNetServices.h>  网络服务处理
#import <Foundation/NSPredicate.h> 负责对获取或过滤对象的逻辑约束条件进行封装
#import <Foundation/NSUbiquitousKeyValueStore.h>  多平台同步设置,用于iCloud
#import <Foundation/NSUndoManager.h>    NSUndoManager会记录下修改、撤销操作的消息,提供了两个栈,一个是undo的栈,另一个是redo的栈
#import <Foundation/NSUUID.h> 自定义UUID

#endif

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || TARGET_OS_WIN32

#import <Foundation/NSArchiver.h>  可变数据对象,有序归档
#import <Foundation/NSCalendarDate.h> 日历处理
#import <Foundation/NSConnection.h>  可以实现不同进程间的通信
#import <Foundation/NSDistantObject.h>   NSProxy 子类 代理
#import <Foundation/NSDistributedNotificationCenter.h>  分布式通告
#import <Foundation/NSGeometry.h>  几何
#import <Foundation/NSPortCoder.h>  用于在分布式对象系统
#import <Foundation/NSPortMessage.h>  主要用于分布式对象系统端口信息
#import <Foundation/NSPortNameServer.h>  提供了一个面向对象的接口的分布式对象系统所使用的端口的注册服务
#import <Foundation/NSProtocolChecker.h>    代理的协议检查器
#import <Foundation/NSTask.h>   NSTask类是一个过程,一种方式运行程序从您的其他程序#import <Foundation/NSXMLDTD.h> XML文档定义
#import <Foundation/NSXMLDTDNode.h>  XML文档类型节点义
#import <Foundation/NSXMLDocument.h> XML文档内化为一个逻辑树结构
#import <Foundation/NSXMLElement.h> 一个XML的树状结构中的元素节点
#import <Foundation/NSXMLNode.h> 抽象的,逻辑树结构表示XML文档中的节点
#import <Foundation/NSXMLNodeOptions.h> XML文档节点操作
#import <Foundation/NSURLDownload.h> URL下载处理
#import <Foundation/NSURLHandle.h>   该对象的访问和管理资源数据表明由一个NSURL对象的编程接口
#endif

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))

#import <Foundation/NSAffineTransform.h>   仿射交换处理,图片翻转等
#import <Foundation/NSAppleEventDescriptor.h>  底层的苹果事件的描述符数据类型
#import <Foundation/NSAppleEventManager.h>  特定类型的苹果事件的处理程序例程和调度事件,不如当前APP启动另外一个APP
#import <Foundation/NSAppleScript.h>     加载,编译和执行脚本.
#import <Foundation/NSClassDescription.h>抽象类,它提供接口查询的关系和属性
#import <Foundation/NSDistributedLock.h> 分布式锁
#import <Foundation/NSGarbageCollector.h> 内存回收处理
#import <Foundation/NSHFSFileTypes.h>   HFS文件类型处理
#import <Foundation/NSHost.h>  IP获取
#import <Foundation/NSObjectScripting.h>  脚本对象
#import <Foundation/NSScriptClassDescription.h> 编写脚本的类之间的映射关系
#import <Foundation/NSScriptCoercionHandler.h>  强制转换一个类型的脚本数据到另一个
#import <Foundation/NSScriptCommand.h> 实例脚本
#import <Foundation/NSScriptCommandDescription.h>  描述了一个Cocoa应用程序的脚本命令支持
#import <Foundation/NSScriptExecutionContext.h> 共享脚本
#import <Foundation/NSScriptKeyValueCoding.h>  KVC 脚本信息设置
#import <Foundation/NSScriptObjectSpecifiers.h>   非正式协议,自定义脚本对象
#import <Foundation/NSScriptStandardSuiteCommands.h>  标准命令处理
#import <Foundation/NSScriptSuiteRegistry.h>  指定顶层脚本化的信息
#import <Foundation/NSScriptWhoseTests.h>    抽象类,逻辑处理
#import <Foundation/NSSpellServer.h>  使您的应用程序的拼写检查器提供服务的任何应用程序的拼写
#import <Foundation/NSUserNotification.h>  通知配置处理
#import <Foundation/NSUserScriptTask.h>  执行用户提供的脚本,抽象类
#import <Foundation/NSXPCConnection.h> 多线程通信处理
#endif
复制代码
原文地址:https://www.cnblogs.com/liuxiaokun/p/5533711.html