`
bluepeer
  • 浏览: 74461 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Cocoa框架学习笔记

 
阅读更多

       iPhone,Safari,Mail都是Cocoa应用程序。运行环境上呈现Aqua用户界面和Mac OS其他可视部分(Finder,Dock等)集成。开发方面Cocoa是面向对象的软件组件-类-的集成套件。适合开发应用程序,命令行工具,插件等, 可以使用多种编程语言。这些类可复用,可支配,可以直接使用或者根据需求扩展。

      主要开发语言Objective-C,是ANSI C的超。在ANSI C语法和语义特性上扩展,支持面向对象。可以将C和Objective-C混合,可以调用非Cocoa编程接口定义的所有函数比如Carbon和BSD。 Cocoa支持C++,Java。定义一个平行的Java类库,实现将Java接口映射到Objective-C实现的桥机制。通过 Python/Objective-C桥进行编程可以使Python对象和Objective-C对象相互传递消息。

      我们可以使用X-code和Interface Builder开发,可以使用Metrowerks的CodeWarrior管理编译调试Cocoa工程或者可以用Emacs编写代码用make file和命令连接编译,在命令行gdb调试。当然Xcode本质也是使用gcc编译gdb调试。

     Cocoa主要框架 :Foundation和Application Kit(图形用户界面部分)框架.动态共享库,头文件,API文档等。

     图1.1

     

                                 图1.1 Mac OS X架构

     图1.2

     

                             图1.2 Cocoa在Mac OS X架构中位置

     图1.2中位于中间层代表包含在Core Services和Application Service两个框架下的系统软件,图中一个层都依赖于下面的其他层。在图1.1中负责Aqua用户界面渲染的系统组件Quartz(Core Graphics框架中实现)是Application Services层的一部分。构架的基础是Darwin,Cocoa在内的Mac OS X各个部分都依赖于Darwin。Cocoa编程接口是应用程序通常需要的基础访问通道。但是如果一些能力在Cocoa接口中找到或在需要更精细的控制, 可以直接使用底层框架。比如Core Graphics,通过调用该框架或OpenGL函数,可以绘出比Cocoa绘画方法更复杂的图像。大多数依赖框架的编程接口是用ANSI C编写的,所以也很方便。Cocoa依赖的或在通过类和方法为之提供访问通道的主要基础框架有:

      Core Foundation,Foundation框架很多类都基于Core Foundation中对应的封装类型。他们之间可以实现类型转换。一些     CoreFoundation 实现又基于Darwin层的BSD部分。

      Carbon,Cocoa使用了Carbon一些服务,Carbon框架在Core Services和Application Services层中定位为系统服务。Cocoa使用了Corbon Core提供的File Manager组件来进行不同文件系统表示之间的转换。

      Core Graphics(Quartz),Cocoa描画和图像处理类基于CoreGraphics类,实现Quartz和窗口服务器组件。

      Launch Services,NSWorkspace类负责向外提供Launch Services。Cocoa使用Launch Services提供的应用程序注册功能和应用程序及文档相关联的图标。

      Print Core,Cocoa的打印类是打印子系统的一个面向对象接口。

      Cocoa还使用Carbon环境的Text Encoding Converter(文本编码转换器)服务来处理一些字符串编码转换。一些Cocoa方法向外提供I/O Kit框架(电源管理),QuickDraw框架(描画),Apple Event框架(Apple Event处理)和ATS框架(字体支持)。

图1.3

     

                                           图1.3   Cocoa架构主要依赖关系

 

    

Foundation框架概述:

      Foundation框架设计目标:为诸如内存管理、对象改变和通告这样的事物定义基本的对象行为和引入一直的规则。通过程序包技术和Unicode字符 串支持国际化和本地化。支持对象的持久保存和分发。在一定程度上独立于OS,以支持移植。为编程的元类型提供对象封装或价物,数值、字符串、集合以及端 口、线程、文件系统等为访问底层系统实体和服务提供的工具类。

      Foundation的几个范式和策略:对象所有权和对象的清除。建立一个对象所有权策略以代替垃圾收集机制。指定对象需要释放自己创建、拷贝、显示保留 的其他对象。自动释放池(NSAutoreleasePool类中定义)实现一种迟缓释放(delayed-release)机制。变体。很多值和容器类 的不可变类都有一个可以修改的变体。可变类的实例从不可变类中继承过来。类簇。是一个抽象类以及一组私有的具体子类的组合。抽象类是这些子类的雨伞接口。 根据不同情况,类簇可以返回适当优化的类实例,比如NSString和NSMutableString就是针对不同的存储需要进行优化的各种私有子类实例 的经纪类。通告是Cocoa主要设计模式。它基于广播机制,使一个对象可以在另一个对象进行某种任务或遇到某情况时,以用户或系统事件的方式得到通告。同 步、异步和分布式通告。有NSNotification、NSNotificationCenter、NSNotificationQueue和 NSDistributeNotificationCenter类实现。

      Foundation框架中的一些类:

Value Objects:NSData类为字节流提供面向对象的存储空间,NSValue和NSNumber类为简单的标量值数组提供面向对象的存储空间。 NSDate、NSCalendarDate、NSTimeZone、NSCalendar、NSDateComponents、NSLocale类提供 了代表时间日期日历地域设置的对象。

Strings:NSString是另一类值对象,负责以null结尾、具有特定编码的字节数组提供面向对象的存储空间。支持UTF-16、 UTF-8、MacRoman和其他编码的字符串间转换。NSString还提供字符串检索组合比较以及文件系统路径操作的方法。用NSScanner对 象对NSString对象中数字和词进行解析。NSCharacterSet代表可以在各个NSString和NSScanner方法中使用的一组字符。

Collections:集合。NSArray NSDictionary NSSet NSEnumerator等类在之前学习中涉及到。

OS Services:访问底层操作系统服务,同时又隔离developer和OS。NSProcessInfo查询应用程序环境。NSHost主机在网络中 名称和地址。NSTimer可以按指定时间间隔向其他对象发送消息。NSRunLoop可以管理程序输入源。NSUserDefaults存储全局和用户 级的系统数据库提供编程接口。

File System and URL:NSFileManager为create rename del mov文件操作提供接口。NSFileHandle可以进行底层的文件操作(exp:文件内查找操作)。NSBundle可以寻找存储在程序包中的资源, 可以动态装载某些资源(exp:nib文件,source code)。NSURL和NSURLHandle来表示 访问 管理源于URL的数据。

Interprocess Communication:NSPipe NSPort NSPortMessage代表不同的系统端口套接字和名字服务器,对实现底层IPC有用。NSPipe代表一个BSD管道。

Locking/Threading:NSTread类可以创建多线程程序,lock类为彼此竞争的线程在访问进程资源时提供控制机制。NSTask可以分出一个子进程来执行其他工作或进度检查。

Notifications:它基于广播机制,使一个对象可以在另一个对象进行某种任务或遇到某情况时,以用户或系统事件的方式得到通告。同步、异 步和分布式通告。有NSNotification、NSNotificationCenter、NSNotificationQueue和 NSDistributeNotificationCenter类实现。 Archiving and Serialization归档和序列化:这里的类使对象分发和持久保留成为可能。NSCoder及其子类和NSCoding协议一起可以以独立于构架的 方式来表示对象中包含的数据,可以将类信息和数据一起存储。

Objective-C Language Services:语言服务,NSException和NSAssertionHandler类为代码中的断言和例外处理提供了面向对象封装。 NSInvocation对象是OBJ-C消息的静态表示。NSMethodSignature对象负责记录方法的类型信息,可用于信息的推送。 NSClassDescription是一个抽象类,用于定义和查询类的关系和属性。

Predicates:条件判断类。NSPredicate、NSCompoundPredicate和NSComparisonPredicate类负责对获取或过滤对象的逻辑约束条件进行封装。NSExpression代表条件判断中的表达式。

Dis-Tributed Objects:我们可以通过分布式对象类来进行同台机器或一个网络中的不同机器的进程间通讯。NSConnection NSDISTantObjectRequest NSDistantObejct NSProtocolChecher其中后面两个类继承与NSProxy。其他所有上面的类都继承于NSObject。 Scripting:对AppleScript和Apple Event命令的支持。NSAppleEventManager NSAppleScript等。

 

      Application Kit框架概述 Appliaction Kit框架包含实现图形、事件驱动的用户界面需要的所有对象:窗口、对话框、按键、菜单、滚动条、文本输入框等的。App Kit处理所有细节。高效的进行屏幕描画、营建设备和屏幕缓冲区进行通讯,描画前清除屏幕上的区域已经视图裁剪。大多数App Kit类都是支持类,可以不用直接使用。用IB创建用户界面对象到应用程序控制器对象的连接,控制器对象负责管理用户界面,协调用户界面和内部数据之间的 数据流。可能用到off-the-shelf控制器对象,可能需要实现一个或多个定制控制器类(特别是使用那些类的动作和委托方法)。如果我们都App Kit类和协议熟悉,我们可以以编程方式控制用户界面。也可以通过子类化NSView或在其他类实现自己的对象。

      App Kit有超过125个类和协议组成,都最终都从Foundation框架的NSObject类继承而来。App Kit类都比较宽且浅,从根类开始只有5个超类。最大的分支的根为NSResponder类,负责定义响应者链,对用户事件进行响应的有序的对象列表。 NSApplication、NSWindow、NSView等都继承自它。Exp:我们按键或鼠标点击,系统产生事件,并沿着响应者链向上传递,寻找可 以响应该事件的对象。第二大分支继承自NSCell类,这组类和NSControl类(继承自NSView-NSResponder)的派生类有映像关 系。对负责响应动作的用户界面对象,App Kit采用架构将其工作分为控件对象(control)和单元对象(cell)。NSControl和NSCell类和子类定义一组常见的用户界面对 象,button,slider,browser等。控件对象和一个或多个单元对象相关联,单元对象负责实现描画细节和事件处理。一个button有 NSButton对象和NSButtoonCell对象组成。控件和单元的实现机制为target-action(目标)机制。单元对象可以保留用户点击 时应该发送给特定对象的消息标识信息。用户操作一个控件时,控件从它的单元对象抽出必要信息,并向目标对象发送动作消息。Target-action机制 可以指定目标对象以及应该调用的方法,赋予动作意义。IB中,按Control,鼠标从控件对象拖拽到应用程序或其他对象就可以,也可以编程完成。另一个 设计模式委托(delegation)机制。界面上很多对象,都定义了委托。委托对象代表被委托对象进行各种动作或者与之相互协作。

   

            

      App Kit框架的一些类和协议:

User Interface:全局应用程序对象。NSApplication,每个应用程序都使用一个NSApplication类的单件实例来控制主事件循环, 跟踪应用程序的窗口、菜单,将事件分发给恰当的对象(应用程序本身或者他的一个窗口),建立高级别的自动释放池,接受应用程序级别的事件通告。 NSApplication对象有个委托对象,在应用程序启动或终止、被隐藏或被激活、即将打开用户选择的文件等适合,我们可以定制应用程序的行为,而不 必生成NSApplication子类。 NSWindow and NSView,继承自NSResponder类。可对动作进行响应。NSApplication对象内维护一个NSWindow对象的列表,每个应用的每 个窗口都有一个对象的对象。每个NSWindow对象都维护一些有层次结构的NSView对象。View层次用于窗口内部的描画和事件处理。 NSWindow对象负责窗口级的事件,将其分发给窗口中View对象,并为View对象提供一个描画区域。NSWindow对象也有个委托,用于定制窗 口的行为。NSView是显示在窗口的所有对象的超类。所有NSView子类都借助图形函数描画。drawRect。创建时需要重载该方法。 NSController控制器类是一个抽象类。子类有NSObjectController、 NSArrayController、NSTreeControlller。都是Cocoa绑定实现的一部分。这里实际到模型-视图-设计模式,先前有文 介绍。 NSPanel(面板对话框),是NSWindow子类。显示短暂全局或紧急信息。App Kit中常见对话框有Save Open和Print对话框。 NSMenu、NSMenuItem、NSCursor类负责程序显示给用户的菜单和光标的行为和外观。 NSBox、NSScrollView和NSSplitView类用于为窗口中的视图集合或者其他视图对象提供图形附件。NSBox类将窗口中元素分组, 并为整组元素描画一个边界。NSSplitView类可以在垂直或者水平方向附加一些视图,并为每个视图分配一定的公共区域,用户可滑动控制条来重新分配 视图区域。NSScrollView类及其辅助类SNClipView为用户提供滚动机制。RSRulerView类可以为一个滚动视图添加标尺和标志。 表视图NSTableView类以行列方式显示视图,用于显示数据库记录等。大纲视图 NSOutlineView的实例,NSTableView的子类也提供了一种显示表格数据的方法。 NSBrowser类创建一个显示和漫游层次的数据对象。

      NSTextField和NSFont文本和字体:NSTextField类实现了一个简单的课编辑文本输入框。NSTextView类为更大的文本体提 供编辑特性,是抽象类NSText的子类,定义了扩展文本系统的借口,支持富文本、添附文件、输入管理和按键绑定、标识文本属性,和Font窗口及 Font菜单、段落风格、Clipboard等组件相互协作。还允许通过委托和通告来定制。IB中NSTextField、NSForm、 NSScrollView等都包含了NSTextView对象,我们很少需要编程方式创建。NSTextStroage、NSLayoutManager 和NSTextContainer还可以实现更强大的文本操作。NSFont和NSFontManager类用于封装和管理字体的家族、尺寸和变体。每个 不同的字体,NSFont类定义一个对象与之对应。NSFontPanel类定义了再用户界面上显示的Font窗口。

       NSImage和NSColor:NSImage和NSImageRep负责封装图形数据,可以访问存储在磁盘文件或显示在屏幕的图像。NSColor、 NSColorSpace、NSColorList等类来支持Cocoa的颜色。NSGraphicsContext、NSBezierPath和 NSAffineTransform类实现变量描画、支持图形变换比如缩放旋转转换等。

      NSPrinter、NSPrintPanel、NSPageLayout和NSPrintInfo类可将显示在窗口或视图上信息进行打印和传真,还可以创建NSView的PDF表示。

      NSFileWrapper,NSDocument:NSFileWrapper类创建与磁盘文件或目录对应的对象。将文件的内容保存在内存中,进行显示 修改以及传递给其他程序。还提供了一个图标。也可以通过Foundation中的NSFileManager类访问或枚举文件和目录内容。  

      NSDocumentControoler、NSDocument和NSWindowController类为创建经济与文档的应用程序定义了构架。

      NSInputSever、NSInputManager类和NSTextInput协议为程序提供访问文本输入管理系统的通道。该系统对不懂国际化键盘产生按键进行解析,将正确文本字符传递给文本视图对象。

      OS Services:和其他程序共享数据,NSPasteboard类定义了剪切板。拖拽NSDraggin…协议。拼写检查NSSpellServer类。 

      Cocoa特性: 基本应用程序框架,为事件驱动的行为和应用程序、窗口、工作空间管理提供基础设 施,我们不需要直接处理事件或发送任何描画命令给渲染库;用户面向对象特性,为用户界面提供了很多对象在IB上可以选择,配置属性连接到其他对象 (windows/text fields/radio buttons/drawers/sheets/tab views/table views/browsers/sliders/image views/color wells/combo boxes/text views);系统交互能力,应用程序可以和文件系统、工作空间、以及其他应用交互;提供了多线程、空间时间处理、资源迟缓加载、内存管理、运行操作编程 支持;基于文档的应用能力,脚本处理等特性。

分享到:
评论

相关推荐

    Objective-C 学习笔记

    NeXT公司由Steve Jobs创立,并在1996年被苹果公司收购,Objective-C也随之成为苹果操作系统的基础,尤其是在Cocoa框架下。Cocoa框架分为两大部分:Foundation框架和Application Kit框架,前者提供了基本的数据结构如...

    IOS 学习笔记补充1

    "IOS学习笔记补充1"是对前期学习内容的进一步丰富和完善,旨在帮助开发者更好地理解和掌握iOS开发的关键知识点。这份笔记不仅适用于初学者,对于有一定经验的开发者来说,也是一个有价值的参考资料。 在iOS开发中,...

    ios学习笔记---simpleping

    "SimplePing"是一个用于实现ping功能的简单示例,它是苹果官方提供的Cocoa框架,主要用于检测网络连通性。这个"ios学习笔记---simpleping"旨在帮助初学者理解如何在iOS应用中实现简单的网络探测功能。 SimplePing是...

    Object-C 学习笔记

    **Object-C 学习笔记** Objective-C(简称Obj-C或Objective C)是苹果公司基于C语言开发的一种面向对象编程语言,主要用于iOS和macOS平台的应用程序开发。它在C语言的基础上添加了Smalltalk风格的消息传递机制,...

    Objective-c学习笔记

    Objective-C的特性使其成为构建Cocoa框架应用程序的理想选择。以下是对Objective-C关键概念的详细解释: 1. **Objective-C是C的超集**:Objective-C在C语言的基础上增加了面向对象的特性,如类、继承、多态等。它...

    iOS 开发流程个人学习笔记

    这份个人学习笔记将深入探讨iOS开发的核心概念、工具、流程以及最佳实践。 首先,我们要了解iOS开发的基础——Swift编程语言。Swift是Apple在2014年推出的一种现代、安全、强大的编程语言,用于构建iOS、iPadOS、...

    swift快速学习笔记1

    它旨在与Objective-C语言共存,并能与现有的Cocoa和Cocoa Touch框架无缝结合。Swift语言将Python的简洁性和Objective-C的强大功能相结合,并且增添了许多现代编程语言的新特性。 知识点二:Swift语言特点 Swift语言...

    swift-ReactNative学习笔记

    3. **Cocoa Touch**: 在iOS开发中,Swift通常与Cocoa Touch框架一起使用,它提供了UI组件和事件处理模型,如UIViewController、UILabel、UIButton等。 4. **Playgrounds**: Swift的Playgrounds是实时调试和学习代码...

    Python学习笔记.pdf

    ### Python学习笔记知识点详解 #### 一、Python基础入门 **1.1 Python简介** - **定义**: Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 - **特点**: - 易于学习: 简洁的语法和清晰的结构...

    懒人笔记iOS客户端.zip

    Objective-C是一种强类型、面向对象的语言,它在苹果的Cocoa框架下广泛用于iOS和Mac OS X应用程序的开发。开发者可以利用其强大的类库和内存管理机制来构建高性能且用户友好的应用。 在Voice2Note中,我们可能看到...

    Iphone开发资料整理

    总结来说,这个“iPhone开发资料整理”集合了iPhone应用开发的关键元素,包括Cocoa框架的理解、Dashcode的实践应用、Objective-C编程语言的学习,以及可能涵盖的设备特性和优化技巧。这些资源对于想要踏入iPhone开发...

    iphone开发学习笔记(1)--NSLog

    本篇笔记将详细介绍`NSLog`的使用和其在iPhone应用开发中的作用。 `NSLog`是Foundation框架的一部分,用于向控制台输出文本信息。它在Objective-C和Cocoa Touch环境中扮演着类似Java中`System.out.println`的角色,...

    《iOS开发标准教程》读书笔记模板.pptx

    本书将介绍 Cocoa 框架的基本概念、Foundation 框架、Application 框架等内容。 自定义视图和视图控制器 视图是iOS应用程序的基本组件之一,本书将介绍视图的基本概念、视图库的介绍、自定义视图的创建、视图控制...

    谷歌师兄的leetcode刷题笔记-tensorflow-cocoa-example:在桌面Cocoa应用程序中使用tensorflow

    机器学习框架做了一件了不起的事情。 该框架的 API 最好从 Python 中使用,但如果您在 Cocoa 中工作,则使用 C++ API 会容易得多。 C++ API 不完整且文档不足。 我怀疑很少有人真正使用过它。 在 Google 内部,...

    swift轻灵的 Markdown 笔记本伴你写出妙言.zip

    在iOS和macOS平台上,Swift Markdown笔记本充分利用了苹果的Swift编程语言特性,如类型安全、自动内存管理以及强大的Cocoa和UIKit框架。Swift的这些优势使得应用运行速度快,界面响应灵敏,且代码易于维护。此外,...

    Notation:快速简单的 OS X 状态栏笔记

    Objective-C是一种面向对象的编程语言,尤其适合开发Mac OS X和iOS的应用程序,因为Apple的开发框架Cocoa和Cocoa Touch就是基于Objective-C的。 虽然没有具体的源代码文件提供,但从项目名为"Notation-master"我们...

    Styf学习笔记

    【Objective-C 知识点详解】 Objective-C,简称OC,是苹果公司开发的面向对象的编程语言,它是C语言的超集,具有...Styf的学习笔记可能涵盖这些知识点的详细解释和示例,对于深入理解Objective-C编程大有裨益。

    IOS开发入门

    "Cocoa常用类和方法"则提供了关于Cocoa框架中常用组件的详细介绍,对于理解和使用iOS SDK至关重要。 在实际开发中,多线程编程是必不可少的技能,"多线程编程指南"可以帮助开发者掌握这一核心技术。同时,"斯坦福...

Global site tag (gtag.js) - Google Analytics