精华内容
参与话题
问答
  • Cocoa

    2016-04-20 08:41:08
    Cocoa 编辑 锁定 Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)。 苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序。主要的...

    Cocoa

    编辑 锁定
    Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)。
    苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序。主要的开发语言为 Objective-c, 一个c 的超集。 Cocoa 开始于1989年9月上市的NeXTSTEP 1.0,当时没有Foundation框架,只有动态运行库, 称为 kit, 最重要的是AppKit. 1993 年 NeXTSTEP 3.1 被移植到了 Intel, Sparc, HP 的平台上,Foundation 首次被加入,同时Sun 和 NeXT 合作开发OpenStep 也可以运行在Windows 系统上VCV。
    Cocoa 应用程序一般在苹果公司的开发工具Xcode(前身为Project Builder)和Interface Builder上用Objective-C写成。不过,通过Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等桥接技术,Java、Clozure CL、LispWorks、Object Pascal、Python、Perl、Ruby等其它工具或者语言也可以用来开发 Cocoa 应用。也有一些其它语言的Cocoa实现无须桥接,比如苹果公司开发的MacRuby和类似Lisp的Nu语言。不使用Xcode和Interface Builder,仅仅通过文本编辑器、GCC和GNU make工具也可以用Objective-C语言开发Cocoa应用。
    对最终用户来说,使用Cocoa编程环境开发的应用程序即为Cocoa 应用。这类应用有独特的外观,因为Cocoa编程环境让程序在多方面自动遵循苹果公司的人机界面守则。
    中文名
    Cocoa
    设计者
    苹果公司
    定    义
    为Mac OS X所创原生面向对象API
    地    位
    Mac OS X上五大API之一

    Cocoa发展历史

    编辑
    更多资料:Mac OS X历史
    Cocoa 是从1980年代由 NeXT 开发的编程环境 NeXTSTEP 和 OPENSTEP 演变而来,这点可由其类别之名皆以 NS 前缀(代表NeXTSTEP)看出端倪。苹果电脑公司在1996年12月收购了NeXT。开发 NeXTSTEP 和 OPENSTEP 的大量工作都转化到了 Mac OS X 中,最显而易见的部分当属 Cocoa。但差异也存在。例如,NeXTSTEP 和 OPENSTEP 使用 Display Postscript 实现文字和图形的屏幕显示,而 Cocoa 依赖苹果的 Quartz(基于 PDF 的绘图模型)。
    Cocoa 这个名词曾经被用来称呼一款帮助儿童创建多媒体工程的应用程序。随后该应用停产。该名称被用作现在的用途。

    Cocoa开发过程

    编辑
    施乐帕罗奥多研究中心的Smalltalk开发小组最终发明了一种可以简化开发过程,提高代码重用率的设计哲学,即“模型-视图-控制器”模式(MVC)。这种模式将应用程序分为三个可以交互的对象集,即模型,视图和控制器。其中,模型类代表原始数据,例如文档、设置、文件、内存中的对象等,视图是模型中数据的可视化表现,而控制器类则包含了将模型和其对应视图连接起来的逻辑,并保持前二者的状态同步。
    Cocoa的设计遵循了严格的MVC原则。在OpenStep下,绝大多数的类要么是高层的视图类(AppKit),或者是相对底层的模型类(Foundation)。与类似的MVC系统相比,OpenStep没有强的模型层,例如它不包含表示“文档”的存储类。在向Cocoa迁移的过程中,模型层被大大扩展了,引入了一系列的类,它们提供了一些桌面程序所需的常用功能。
    在Mac OS X 10.3中,苹果引入了NSController系列类以提供预定义的控制器层。这些类是Cocoa绑定系统的一部分,该系统也允许使用类似键-值-观测器和键-值-绑定协议来对其进行扩展。其中,“绑定”的概念表明两个对象(通常是视图和控制器)之间的关系。绑定使得开发者可以集中于定义这种关系,而不是编写大量的“胶水代码”来实现这些关系。
    在Mac OS X 10.4中,苹果引入了Core Data框架,进一步扩展了这种概念。Core Data标准化了对更改的追踪和模型层的保存行为。因此,该框架大大简化了改变应用程序数据,撤销更改,在磁盘中保存和读取数据的过程。
    通过提供对MVC模型中全部3层的框架支持,苹果的目的在于减少程序员所需编写的“胶水代码”量,以解放这些资源而用于程序的真正特性。

    Cocoa动态绑定

    编辑
    在多数面向对象的编程语言中,调用方法是由直接调用内存中一段固定的代码实现的。由于这种方法需要预定义的处理命令的类,因而限制了程序的设计,通常采用责任链模式作为其设计模式。虽然Cocoa在多数地方仍然采用这种方式,但通过Objective-C的动态绑定特性增加了更多设计的自由性。
    在Objective-C中,消息由selector所代表,其为描述需要调用的方法的一个字符串。在发送消息时,该selector被送入Objective-C运行时中,在可用方法列表中寻找对应的方法,然后调用该方法的实际实现。由于selector只是文本数据,因此它可以保存在文件中,通过网络或在进程间传输,或以其它方式进行操作。方法的实现是在运行时查找的,而非编译时。这样的做法会造成一些性能损失,但动态绑定允许相同的selector代表不同的实现。
    利用这些特性,Cocoa提供了一种通用的数据管理技术,称为键-值编码(KVC)。这种技术允许对象的数据或属性可以在运行时通过其键名进行查找,其中,属性的名称即为其值的键名。在静态语言中,这样的做法是不可能的。KVC大大的增加了设计的自由度:通过KVC,无需知道对象的类型即可访问其属性或数据。另外,利用键-值-观测器(KVO)技术和NSUndoManager类,可以提供自动的撤销/重做支持。

    Cocoa内存管理

    编辑
    Cocoa环境的一个特点是它可以管理动态分配的内存。Cocoa中绝大部分类的基类都是NSObject,它实现了引用计数的内存管理模型。从NSObject继承的类可以响应retain和release消息,以增减其引用计数;也可以通过发送retainCount消息来获取其引用计数。一个以alloc ,copy或Objective-C 2.0中增加的new所创建的对象的引用计数为1;向对象发送retain消息会将计数加1,而发送release消息则会将计数减1。若对象的引用计数减少到了0,则它会被销毁。dealloc消息类似于C++中的析构函数,在对象被销毁之前可能会被调用,但系统不保证会发送该消息。这种引用计数的模型与微软的COM中的IUnknown接口特性十分相似,它提供了AddRef和Release接口,与retain和release对应。
    从Objective-C 2.0开始,Objective-C运行时实现了可选的垃圾收集器。若垃圾收集的特性被激活,则运行时会将引用计数相关的操作,例如“retain”和“release”,变为无操作。iOS上的Objective-C 2.0实现中不包含垃圾收集器。垃圾收集器运行在一个低优先级的后台线程中,并可以在用户动作时暂停,从而保持良好的用户体验。

    Cocoa主要框架

    编辑
    Cocoa包含两个主要的Objective-C对象库,称为“框架”。框架的功能类似于动态库,即可以在运行时动态的载入应用程序的地址空间,但框架作为一个捆绑 (计算机)而非独立文件,其中除了可执行代码外,也包含了资源,头文件和文档。
    “Foundation工具包”,或简称为“Foundation”,首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS X和iOS中使用。
    “应用程序工具包”,或称AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序与图形用户界面交互所需的代码。它是基于Foundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。
    “用户界面工具包”,或称UIKit(User Interface Kit),是用于iOS的图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。
    Cocoa构架的一个关键部分是其多样的视图模型。总体而言,它是基于由Quartz提供的PDF绘制模型的,该特性允许使用PostScript绘制自定义图形内容,同时也自动的支持了打印机以及类似设备。由于Cocoa框架管理了全部的绘图操作,例如裁剪,滚动,缩放等,程序员可以不再重复实现基础的功能,而可以集中于提供程序的关键功能上。

    Cocoa基础对象

    编辑
    Cocoa中最有用的特性是系统提供的强大的“基础对象”,例如Foundation中的NSString和NSAttributedString类,提供了Unicode字符串的支持;而AppKit中的NSText系统则允许程序员在GUI中放置字符串对象。
    NSText及其相关类是用于显示和编辑字符串的。这些对象允许程序实现简单的单行文本框,也可以实现完整的多页,多栏文本显示方案 ,方案同时可以提供支持完整的专业排版特性,例如压缩字符,合字,环绕形状的文字,旋转,完整的Unicode支持和反锯齿字形渲染。段落格式可以自动控制或由用户自定义;可以使用内建的“ruler”对象附加到任何文本视图上。这些类也有自动拼写检查特性,该特性使用一个由所有程序共享的字典。另外,也允许无限制数量的撤销/重做操作。只使用内建的特性,任何人都可以只用不到10行代码写出一个具备上述特性的文本编辑器,而若使用Cocoa绑定,甚至可以不用写一行代码。
    若需要对已有特性进行扩展,Objective-C中的类别特性使得这项操作变得相当容易。通过类别可以直接对已有类进行功能添加,而无需对其进行更改或获得其源代码。一般而言,这样的目的需要通过继承原有的类并修改原有的代码,将原有的类以新的子类代替来完成。

    Cocoa实现

    编辑
    Cocoa 本身由 Objective-C 语言写成,因此 Objective-C 是开发 Cocoa 应用的首选语言。虽然也提供 Java 到 Cocoa 的绑定,但是在开发者中并未得到广泛采用。而且,由于使用桥接机制,Java 的绑定并不能全面利用 Cocoa 的所有功能。2005年,苹果公司宣布 Java 的 Cocoa 绑定在 Mac OS X 10.4 和之后版本中属被废弃的技术。换句话说,Cocoa API 中可能会逐渐出现不支援 Java 的功能。
    作为 Xcode 一部分的 AppleScript Studio 工具允许用户和开发者用 AppleScript 编写一些简单的 Cocoa 应用。第三方实现的绑定有 Clozure CL、LispWorks、PyObjC (Python)、RubyCocoa (Ruby)、CamelBones (Perl)、Cocoa#、Monobjc (C#) 和 NObjective(C#)。Nu 语言直接使用 Objective-C 的对象模型,所以无须绑定就可以调用 Cocoa API。
    也有开源项目把 Cocoa 的大部分在其它操作系统上实现(包括 Windows),从而使开发跨平台的 Cocoa 应用成为可能。比如 GNUStep 和 Cocotron。
    词条标签:
    计算机术语 计算机学 科技


    展开全文
  • cocoa

    2015-12-12 13:43:00
    Cocoa Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)。 苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序。主要的开发语言为 ...

    Cocoa

    Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)。
    苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序。主要的开发语言为 Objective-c, 一个c 的超集。 Cocoa 开始于1989年9月上市的NeXTSTEP 1.0,当时没有Foundation框架,只有动态运行库, 称为 kit, 最重要的是AppKit. 1993 年 NeXTSTEP 3.1 被移植到了 Intel, Sparc, HP 的平台上,Foundation 首次被加入,同时Sun 和 NeXT 合作开发OpenStep 也可以运行在Windows 系统上VCV。
    Cocoa 应用程序一般在苹果公司的开发工具Xcode(前身为Project Builder)和Interface Builder上用Objective-C写成。不过,通过Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等桥接技术,Java、Clozure CL、LispWorks、Object Pascal、Python、Perl、Ruby等其它工具或者语言也可以用来开发 Cocoa 应用。也有一些其它语言的Cocoa实现无须桥接,比如苹果公司开发的MacRuby和类似Lisp的Nu语言。不使用Xcode和Interface Builder,仅仅通过文本编辑器、GCC和GNU make工具也可以用Objective-C语言开发Cocoa应用。
    对最终用户来说,使用Cocoa编程环境开发的应用程序即为Cocoa 应用。这类应用有独特的外观,因为Cocoa编程环境让程序在多方面自动遵循苹果公司的人机界面守则。
    中文名
    Cocoa
    设计者
    苹果公司
    定    义
    为Mac OS X所创原生面向对象API
    地    位
    Mac OS X上五大API之一
     

    发展历史编辑

    更多资料:Mac OS X历史
    Cocoa 是从1980年代由 NeXT 开发的编程环境 NeXTSTEP 和 OPENSTEP 演变而来,这点可由其类别之名皆以 NS 前缀(代表NeXTSTEP)看出端倪。苹果电脑公司在1996年12月收购了NeXT。开发 NeXTSTEP 和 OPENSTEP 的大量工作都转化到了 Mac OS X 中,最显而易见的部分当属 Cocoa。但差异也存在。例如,NeXTSTEP 和 OPENSTEP 使用 Display Postscript 实现文字和图形的屏幕显示,而 Cocoa 依赖苹果的 Quartz(基于 PDF 的绘图模型)。
    Cocoa 这个名词曾经被用来称呼一款帮助儿童创建多媒体工程的应用程序。随后该应用停产。该名称被用作现在的用途。

    开发过程编辑

    施乐帕罗奥多研究中心的Smalltalk开发小组最终发明了一种可以简化开发过程,提高代码重用率的设计哲学,即“模型-视图-控制器”模式(MVC)。这种模式将应用程序分为三个可以交互的对象集,即模型,视图和控制器。其中,模型类代表原始数据,例如文档、设置、文件、内存中的对象等,视图是模型中数据的可视化表现,而控制器类则包含了将模型和其对应视图连接起来的逻辑,并保持前二者的状态同步。
    Cocoa的设计遵循了严格的MVC原则。在OpenStep下,绝大多数的类要么是高层的视图类(AppKit),或者是相对底层的模型类(Foundation)。与类似的MVC系统相比,OpenStep没有强的模型层,例如它不包含表示“文档”的存储类。在向Cocoa迁移的过程中,模型层被大大扩展了,引入了一系列的类,它们提供了一些桌面程序所需的常用功能。
    在Mac OS X 10.3中,苹果引入了NSController系列类以提供预定义的控制器层。这些类是Cocoa绑定系统的一部分,该系统也允许使用类似键-值-观测器和键-值-绑定协议来对其进行扩展。其中,“绑定”的概念表明两个对象(通常是视图和控制器)之间的关系。绑定使得开发者可以集中于定义这种关系,而不是编写大量的“胶水代码”来实现这些关系。
    在Mac OS X 10.4中,苹果引入了Core Data框架,进一步扩展了这种概念。Core Data标准化了对更改的追踪和模型层的保存行为。因此,该框架大大简化了改变应用程序数据,撤销更改,在磁盘中保存和读取数据的过程。
    通过提供对MVC模型中全部3层的框架支持,苹果的目的在于减少程序员所需编写的“胶水代码”量,以解放这些资源而用于程序的真正特性。

    动态绑定编辑

    在多数面向对象的编程语言中,调用方法是由直接调用内存中一段固定的代码实现的。由于这种方法需要预定义的处理命令的类,因而限制了程序的设计,通常采用责任链模式作为其设计模式。虽然Cocoa在多数地方仍然采用这种方式,但通过Objective-C的动态绑定特性增加了更多设计的自由性。
    在Objective-C中,消息由selector所代表,其为描述需要调用的方法的一个字符串。在发送消息时,该selector被送入Objective-C运行时中,在可用方法列表中寻找对应的方法,然后调用该方法的实际实现。由于selector只是文本数据,因此它可以保存在文件中,通过网络或在进程间传输,或以其它方式进行操作。方法的实现是在运行时查找的,而非编译时。这样的做法会造成一些性能损失,但动态绑定允许相同的selector代表不同的实现。
    利用这些特性,Cocoa提供了一种通用的数据管理技术,称为键-值编码(KVC)。这种技术允许对象的数据或属性可以在运行时通过其键名进行查找,其中,属性的名称即为其值的键名。在静态语言中,这样的做法是不可能的。KVC大大的增加了设计的自由度:通过KVC,无需知道对象的类型即可访问其属性或数据。另外,利用键-值-观测器(KVO)技术和NSUndoManager类,可以提供自动的撤销/重做支持。

    内存管理编辑

    Cocoa环境的一个特点是它可以管理动态分配的内存。Cocoa中绝大部分类的基类都是NSObject,它实现了引用计数的内存管理模型。从NSObject继承的类可以响应retain和release消息,以增减其引用计数;也可以通过发送retainCount消息来获取其引用计数。一个以alloc ,copy或Objective-C 2.0中增加的new所创建的对象的引用计数为1;向对象发送retain消息会将计数加1,而发送release消息则会将计数减1。若对象的引用计数减少到了0,则它会被销毁。dealloc消息类似于C++中的析构函数,在对象被销毁之前可能会被调用,但系统不保证会发送该消息。这种引用计数的模型与微软的COM中的IUnknown接口特性十分相似,它提供了AddRef和Release接口,与retain和release对应。
    从Objective-C 2.0开始,Objective-C运行时实现了可选的垃圾收集器。若垃圾收集的特性被激活,则运行时会将引用计数相关的操作,例如“retain”和“release”,变为无操作。iOS上的Objective-C 2.0实现中不包含垃圾收集器。垃圾收集器运行在一个低优先级的后台线程中,并可以在用户动作时暂停,从而保持良好的用户体验。

    主要框架编辑

    Cocoa包含两个主要的Objective-C对象库,称为“框架”。框架的功能类似于动态库,即可以在运行时动态的载入应用程序的地址空间,但框架作为一个捆绑 (计算机)而非独立文件,其中除了可执行代码外,也包含了资源,头文件和文档。
    “Foundation工具包”,或简称为“Foundation”,首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS X和iOS中使用。
    “应用程序工具包”,或称AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序与图形用户界面交互所需的代码。它是基于Foundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。
    “用户界面工具包”,或称UIKit(User Interface Kit),是用于iOS的图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。
    Cocoa构架的一个关键部分是其多样的视图模型。总体而言,它是基于由Quartz提供的PDF绘制模型的,该特性允许使用PostScript绘制自定义图形内容,同时也自动的支持了打印机以及类似设备。由于Cocoa框架管理了全部的绘图操作,例如裁剪,滚动,缩放等,程序员可以不再重复实现基础的功能,而可以集中于提供程序的关键功能上。

    基础对象编辑

    Cocoa中最有用的特性是系统提供的强大的“基础对象”,例如Foundation中的NSString和NSAttributedString类,提供了Unicode字符串的支持;而AppKit中的NSText系统则允许程序员在GUI中放置字符串对象。
    NSText及其相关类是用于显示和编辑字符串的。这些对象允许程序实现简单的单行文本框,也可以实现完整的多页,多栏文本显示方案 ,方案同时可以提供支持完整的专业排版特性,例如压缩字符,合字,环绕形状的文字,旋转,完整的Unicode支持和反锯齿字形渲染。段落格式可以自动控制或由用户自定义;可以使用内建的“ruler”对象附加到任何文本视图上。这些类也有自动拼写检查特性,该特性使用一个由所有程序共享的字典。另外,也允许无限制数量的撤销/重做操作。只使用内建的特性,任何人都可以只用不到10行代码写出一个具备上述特性的文本编辑器,而若使用Cocoa绑定,甚至可以不用写一行代码。
    若需要对已有特性进行扩展,Objective-C中的类别特性使得这项操作变得相当容易。通过类别可以直接对已有类进行功能添加,而无需对其进行更改或获得其源代码。一般而言,这样的目的需要通过继承原有的类并修改原有的代码,将原有的类以新的子类代替来完成。

    实现编辑

    Cocoa 本身由 Objective-C 语言写成,因此 Objective-C 是开发 Cocoa 应用的首选语言。虽然也提供 Java 到 Cocoa 的绑定,但是在开发者中并未得到广泛采用。而且,由于使用桥接机制,Java 的绑定并不能全面利用 Cocoa 的所有功能。2005年,苹果公司宣布 Java 的 Cocoa 绑定在 Mac OS X 10.4 和之后版本中属被废弃的技术。换句话说,Cocoa API 中可能会逐渐出现不支援 Java 的功能。
    作为 Xcode 一部分的 AppleScript Studio 工具允许用户和开发者用 AppleScript 编写一些简单的 Cocoa 应用。第三方实现的绑定有 Clozure CL、LispWorks、PyObjC (Python)、RubyCocoa (Ruby)、CamelBones (Perl)、Cocoa#、Monobjc (C#) 和 NObjective(C#)。Nu 语言直接使用 Objective-C 的对象模型,所以无须绑定就可以调用 Cocoa API。
    也有开源项目把 Cocoa 的大部分在其它操作系统上实现(包括 Windows),从而使开发跨平台的 Cocoa 应用成为可能。比如 GNUStep 和 Cocotron。

    转载于:https://www.cnblogs.com/hai-zi/p/5041119.html

    展开全文
  • Mantle 是 CocoaCocoa Touch 的模型框架,你可以通过它为你的 CocoaCocoa Touch 写简单的模型层。示例代码:@interface XYUser : MTLModel @property (readonly, nonatomic, copy) NSString *name;...
  • [奥莱理] Cocoa Objective-C 开发学习手册 第4版 (英文版) [奥莱理] Learning Cocoa with Objective-C 4th Edition (E-Book) ☆ 图书概要:☆ You’ll learn how to work with the Xcode IDE, Objective-C’s ...
  • The key to creating a modern Mac application is Cocoa. According to Apple, Cocoa is a set of object-oriented frameworks that provide a runtime environment for Mac OS X applications. As you make your ...
  • Learn Cocoa on the Mac by Jack Nutting, David Mark and Jeff LaMarche The Cocoa frameworks are some of the most powerful frameworks for creating native desktop applications available on any platform ...
  • Cocoa画图

    2011-09-22 19:38:02
    points(NSPoint) 同直角坐标系一样原点在左下角 结构 typedef struct _NSPoint{ float x; float y; }NSPoint; 定义:NSPoint thePoint; 初始化:thePoint=NSMakePoint
    
    

    points(NSPoint)

    同直角坐标系一样原点在左下角

    结构

    typedef struct _NSPoint{

    float x;

    float y;

    }NSPoint;

    定义:NSPoint thePoint;

    初始化:thePoint=NSMakePoint(0,0);

    Rects(NSRect) and sizes(NSSize)

    结构

    typedef struct _NSRect{

    NSPoint origin;

    NSSize size;

    }NSRect;

     

    typedef struct _NSSize{

    float width;

    float height;

    }NSSize;

    定义:NSRect theRect;

    初始化:theRect=NSMakeRect(0,0,100,100);//(x,y,width,height

    使用:theRect.origin.x , theRect.origin.y

    theRect.size.width , theRect.size.height

    Colors(NSColor)

    两种方法初始化

    简单方式,用系统已提供的颜色名称

    NSColor *aColor;

    aColor=[NSColor blackColor];

    blackColor Black

    blueColor Bright blue

    brownColor Brown

    clearColor Clear/transparent

    cyanColor Light blue

    DarkGrayColor Dark gray(for the Canadians,dark grey)

    grayColor Medium gray

    greenColor Bright green

    lightGrayColor Light gray

    magentaColor Pinkish purple color

    orangeColor Orange

    purpleColor Purple

    redColor Bright red

    whiteColor White

    yellowColor Bright and sunny yellow

    自己新建颜色

    Device dependent(or device)

    DeviceRGB:(Red , green , blue and alpha components)

    //参数值为0-1,颜色表示[(num +1)/256],alpha表不透明度

    NSColor=theColor;//black

    theColor=[NSColor colorWithDeviceRed:(float)0.0,

    green:(float)0.0 blue:(float)0.0 alpha:(float)1.0];

    [theColor set];//设置画笔

    DeviceCMYK:(Cyan , magenta , yellow , black and alpha components)

    DeviceWhite:(White and alpha components)

    Device  independent(or calibrated)

    Named

    用线和图形绘画

    利用点成线,线成面的原理

    画一个矩形

    NSRect theRect;

    theRect=NSMakeRect(0,0,100,100);

    NSBezierPath *thePath;

    thePath=[NSBezierPath bezierPathWithRect:theRect];

    //bezierPathWithOvalInRect 画椭圆

    用颜色填充矩形

    NSColor *theColor=[NSColor blackColor];

    [theColor set];

    [thePath fill];

    画一条线

    画一条线就相当于在一条线周围描个框,并填充它

    在上面已填充的矩形周围描框,需要的操作同上相反

    theColor=[NSColor blackColor];

    [theColor set];

    [thePath setLineWidth:5];

    [thePath stroke];

    画任意图形

    用多个点连成线然后填充构成图形,有起始点,其它点以起始点为相对坐标,移动图形时仅需要改变起始点坐标

     

    +X:X右边; -X:X左边; +Y:Y上边; -Y:Y下边

    NSBezierPath *stopSign=[NSBezierPath bezierPath];

    NSPoint pt1,pt2,pt3,pt4,pt5;//五边形

    pt1=NSMakePoint(300,300);

    pt2=NSMakePoint(400,300);

    pt3=NSMakePoint(450,200);

    pt4=NSMakePoint(350,100);

    pt5=NSMakePoint(250,200);

    [stopSign moveToPoint:pt1];

    [stopSign relativeLineToPoint:pt2];

    [stopSign relativeLineToPoint:pt3];

    [stopSign relativeLineToPoint:pt4];

    [stopSign relativeLineToPoint:pt5];

    [stopSign closePath];

    [[NSColor redColor] set];

    [stopSign fill];

    [[NSColor whiteColor]set];

    [stopSign setLineWide:5];

    [stopSign stroke];

    画文字(Text)

    NSString *theString=@"SHOW";

    NSPoint theTextPos=NSMakePoint(100,120);

    [theString drqwAtPoint:theTextPos withAttributes:nil];

    可通过设置withAttributes方法(需要NSDictionary类型变量)修改文字显示样式

    NSMutableDictionary *theAttributes=[[NSMutableDictionary alloc] init];

    [theAttributes setObject:[NSFont fontWithName:@"Helvetica" size:62] forKey:NSFontAttributeName];

    [theAttributes setObject:[NSColor whiteColor] forKey:NSForegroundColorAttributeName];

    [theString drawAtPoint:theTextPos withAttributes:theAttributes];

    [theAttrubutes release];

    显示图片

    把一张图片拉到Xcode工程中

    NSPoint theImagePos=NSMakePoint(0,0)

    NSImage * theImage=[NSImage imageNamed:@"mypic.jpg"];

    [theImage dissolveToPoint:theImagePos fraction:(1.0)];

    //fraction的值表示图片显示的不透明度:1表不透明

    展开全文
  • 苹果开发之Cocoa编程(原书第4版)是在Aaron多年教学经验的基础上进行了总结提炼的精华之作,加之前面3版不断推敲和完善,已经成为学习Cocoa编程的入门级经典书籍。本书系统介绍了Objective-C语言、Cocoa主要的设计...
  • <div><p>Provides the <code>REALM_COCOA_PLATFORMS</code> environment variable to allow restricting which platforms are built via <code>sh build.sh build-cocoa</code>. <p>This allows quicker iteration ...
  • <div><p>The old renderer did a lot of work outside the Cocoa drawRect method. In macOS 10.14 this stopped working (see https://github.com/9fans/plan9port/issues/185). The best information I could find...
  • New Cocoa front end for Mac

    2020-11-24 15:17:47
    Makefile.cocoa, main-cocoa.m) I hope eventually my version will become the canonical Mac Angband, but for now it lives alongside the existing "osx" front end. This merge does not touch any ...
  • <div><p>Add a new macOS cocoa screen, cocoa-screen-metal.m. Rewrite the macOS cocoa drawing code to use the builtin runloop, and use Metal to push pixels with CAMetalLayer. <p>Remove all of the ...
  • [Cocoa]苹果 Cocoa 编码规范

    千次阅读 2011-11-02 16:36:16
    [Cocoa]苹果 Cocoa 编码规范 罗朝辉(http://blog.csdn.net/kesalin) CC许可,转载请注明出处 本文档下载:点击这里 > Code Naming Basics 代码命名基础 在面向对象软件库的设计过程中,开发人员经常...

    [Cocoa]苹果 Cocoa 编码规范

    罗朝辉(http://blog.csdn.net/kesalin)

    CC许可,转载请注明出处

    本文档下载:点击这里

    > Code Naming Basics 代码命名基础

    在面向对象软件库的设计过程中,开发人员经常忽视对类,方法,函数,常量以及其他编程接口元素的命名。本节讨论大多数Cocoa接口的一些命名约定。


    >> General Principles 一般性原则

    >>> Clarity 清晰性

    ● 最好是既清晰又简短,但不要为简短而丧失清晰性

    代码

    点评

    insertObject:atIndex:

    good

    insert:at:

    不清晰;要插入什么?“at”表示什么?

    removeObjectAtIndex:

    good

    removeObject:

    这样也不错,因为方法是移除作为参数的对象

    remove

    不清晰;要移除什么?


    ● 名称通常不缩写,即使名称很长,也要拼写完全

    代码

    点评

    destinationSelection

    good

    destSel

    不清晰

    setBackgroundColor:

    good

    setBkgdColor:

    不清晰


    你可能会认为某个缩写广为人知,但有可能并非如此,尤其是当你的代码被来自不同文化和语言背景的开发人员所使用时。


    ● 然而,你可以使用少数非常常见,历史悠久的缩写。请参考:”可接受的缩略名“一节


    ● 避免使用有歧义的 API 名称,如那些能被理解成多种意思的方法名称

    代码

    点评

    sendPort

    是发送端口还是返回一个发送端口?

    displayName

    是显示一个名称还是返回用户界面中控件的标题?


    >>> Consistency 一致性

    ● 尽可能使用与 Cocoa 编程接口命名保持一致的名称。如果你不太确定某个命名的一致性,请浏览一下头文件或参考文档中的范例


    ● 在使用多态方法的类中,命名的一致性非常重要。在不同类中实现相同功能的方法应该具有相同的名称

    代码

    点评

    - (int) tag

    在 NSView, NSCell, NSControl 中有定义

    - (void) setStringValue:(NSString *)

    在许多 Cocoa classes 中有定义


    请参考“方法参数”一节。


    >>> No Self Reference 不要自我指涉

    ● 不要名称自我指涉

    代码

    点评

    NSString

    okey

    NSStringObject

    自我指涉


    ● 掩码(可使用位操作进行组合)和用作通知名称的常量不受该约定限制

    代码

    点评

    NSUnderlineByWordMask

    okey

    NSTableViewColumnDidMoveNotification

    okey


    >> Prefixes 前缀

    前缀是名称的重要组成部分。它们可以区分软件的功能范畴。通常,软件会被打包成一个框架或多个紧密相关的框架(如 Foundation 和 Application Kit 框架)。前缀可以防止第三方开发者与苹果公司之间的命名冲突(同样也可防止苹果内部不同框架之间的命名冲突)


    ● 前缀有规定的格式。它由两到三个大写字符组成,不能使用下划线与子前缀

    前缀

    Cocoa 框架

    NS

    Foundation

    NS

    Application Kit

    AB

    Address Book

    IB

    Interface Builder


    ● 命名 class,protocol,structure,函数,常量时使用前缀;命名成员方法时不使用前缀,因为方法已经在它所在类的命名空间种;同理,命名结构体字段时也不使用前缀


    >> Typographic Conventions 书写约定

    在为 API 元素命名时,请遵循如下一些简单的书写约定

    ● 对于包含多个单词的名称,不要使用标点符号作为名称的一部分或作为分隔符(下划线,破折号等);此外,大写每个单词的首字符并将这些单词连续拼写在一起。请注意以下限制:

    • 方法名小写第一个单词的首字符,大写后续所有单词的首字符。方法名不使用前缀。如: fileExistsAtPath:isDirectory: 如果方法名以一个广为人知的大写首字母缩略词开头,该规则不适用,如:NSImage 中的 TIFFRepresentation
    • 函数名和常量名使用与其关联类相同的前缀,并且要大写前缀后面所有单词的首字符。如:NSRunAlertPanel,NSCellDisabled
    • 避免使用下划线来表示名称的私有属性。苹果公司保留该方式的使用。如果第三方这样使用可能会导致命名冲突,他们可能会在无意中用自己的方法覆盖掉已有的私有方法,这会导致严重的后果。请参考“私有方法”一节以了解私有 API 的命名约定的建议

    >> Class and Protocol Names 类与协议命名

    类名应包含一个明确描述该类(或类的对象)是什么或做什么的名词。类名要有合适的前缀(请参考“前缀”一节)。Foundation 及 Application Kit 有很多这样例子,如:NSString, NSData, NSScanner, NSApplication, NSButton 以及 NSEvent。


    协议应该根据对方法的行为分组方式来命名。

    ● 大多数协议仅组合一组相关的方法,而不关联任何类,这种协议的命名应该使用动名词(ing),以不与类名混淆。

    代码

    点评

    NSLocking

    good

    NSLock

    糟糕,它看起来像类名


    ● 有些协议组合一些彼此无关的方法(这样做是避免创建多个独立的小协议)。这样的协议倾向于与某个类关联在一起,该类是协议的主要体现者。在这种情形,我们约定协议的名称与该类同名。NSObject 协议就是这样一个例子。这个协议组合一组彼此无关的方法,有用于查询对象在其类层次中位置的方法,有使之能调用特殊方法的方法以及用于增减引用计数的方法。由于 NSObject 是这些方法的主要体现者,所以我们用类的名称命名这个协议。


    >> Header Files 头文件

    头文件的命名方式很重要,我们可以根据其命名知晓头文件的内容。

    ● 声明孤立的类或协议:将孤立的类或协议声明放置在单独的头文件中,该头文件名称与类或协议同名

    头文件

    声明

    NSApplication.h

    NSApplication 类


    ● 声明相关联的类或协议:将相关联的声明(类,类别及协议) 放置在一个头文件中,该头文件名称与主要的类/类别/协议的名字相同。

    头文件

    声明

    NSString.h

    NSString 和 NSMutableString 类

    NSLock.h

    NSLocking 协议和 NSLock, NSConditionLock, NSRecursiveLock 类


    ● 包含框架头文件:每个框架应该包含一个与框架同名的头文件,该头文件包含该框架所有公开的头文件。

    头文件

    框架

    Foundation.h

    Foundation.framework


    ● 为已有框架中的某个类扩展 API:如果要在一个框架中声明属于另一个框架某个类的范畴类的方法,该头文件的命名形式为:原类名+“Additions”。如 Application Kit 中的 NSBundleAdditions.h 


    ● 相关联的函数与数据类型:将相联的函数,常量,结构体以及其他数据类型放置到一个头文件中,并以合适的名字命名。如 Application Kit 中的 NSGraphics.h


    > Naming Methods 方法命名

    >> General Rules 一般性规则

    为方法命名时,请考虑如下一些一般性规则:

    ● 小写第一个单词的首字符,大写随后单词的首字符,不使用前缀。请参考“书写约定”一节。有两种例外情况:1,方法名以广为人知的大写字母缩略词(如TIFF or PDF)开头;2,私有方法可以使用统一的前缀来分组和辨识,请参考“私有方法”一节


    ● 表示对象行为的方法,名称以动词开头:

    - (void) invokeWithTarget:(id)target:

    - (void) selectTabViewItem:(NSTableViewItem *)tableViewItem

    名称中不要出现 do 或 does,因为这些助动词没什么实际意义。也不要在动词前使用副词或形容词修饰


    ● 如果方法返回方法接收者的某个属性,直接用属性名称命名。不要使用 get,除非是间接返回一个或多个值。请参考“访问方法”一节。

    - (NSSize) cellSize;

     对

    - (NSSize) calcCellSize;

     错

    - (NSSize) getCellSize;

     错


    ● 参数要用描述该参数的关键字命名

    - (void) sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;

     对

    - (void) sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;

     错


    ● 参数前面的单词要能描述该参数。

    - (id) viewWithTag:(int)aTag;

     对

    - (id) taggedView:(int)aTag;

     错


    ● 细化基类中的已有方法:创建一个新方法,其名称是在被细化方法名称后面追加参数关键词

    - (id) initWithFrame:(NSRect)frameRect;

    NSView

    - (id) initWithFrame:(NSRect)frameRect mode:(ind)aMode cellClass:(Class)factoryId numberOfRows:(int)rowsHigh numberOfColumns:(int)colsWide;

    NSMatrix - NSView 的子类


    ● 不要使用 and 来连接用属性作参数关键字

    - (int) runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes;

     对

    - (int) runModalForDirectory:(NSString *)path addFile:(NSString *)name addTypes:(NSArray *)fileTypes;

     错


    虽然上面的例子中使用 add 看起来也不错,但当你方法有太多参数关键字时就有问题。


    ● 如果方法描述两种独立的行为,使用 and 来串接它们

     - (BOOL) openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;

     NSWorkspace 


    >> Accessor Methods 访问方法

    访问方法是对象属性的读取与设置方法。其命名有特定的格式依赖于属性的描述内容。


    ● 如果属性是用名词描述的,则命名格式为:

    - (void) setNoun:(type)aNoun;

    - (type) noun;

    例如:

    - (void) setgColor:(NSColor *)aColor;

    - (NSColor *) color;


    ● 如果属性是用形容词描述的,则命名格式为:

    - (void) setAdjective:(BOOL)flag;

    - (BOOL) isAdjective;

    例如:

    - (void) setEditable:(BOOL)flag;

    - (BOOL) isEditable;


    ● 如果属性是用动词描述的,则命名格式为:(动词要用现在时时态)

    - (void) setVerbObject:(BOOL)flag;

    - (BOOL) verbObject;

    例如:

    - (void) setShowAlpha:(BOOL)flag;

    - (BOOL) showsAlpha;

    ● 不要使用动词的过去分词形式作形容词使用

    - (void) setAcceptsGlyphInfo:(BOOL)flag;

     对

    - (BOOL) acceptsGlyphInfo;

     对

    - (void) setGlyphInfoAccepted:(BOOL)flag;

     错

    - (BOOL) glyphInfoAccepted;

     错


    ● 可以使用情态动词(can, should, will 等)来提高清晰性,但不要使用 do 或 does

    - (void) setCanHide:(BOOL)flag;

     对

    - (BOOL) canHide;

     对

    - (void) setShouldCloseDocument:(BOOL)flag;

     对

    - (void) shouldCloseDocument;

     对

    - (void) setDoseAcceptGlyphInfo:(BOOL)flag;

     错

    - (BOOL) doseAcceptGlyphInfo;

     错


    ● 只有在方法需要间接返回多个值的情况下,才使用 get

    - (void) getLineDash:(float *)pattern count:(int *)count phase:(float *)phase;

     NSBezierPath


    像上面这样的方法,在其实现里应允许接受 NULL 作为其 in/out 参数,以表示调用者对一个或多个返回值不感兴趣。


    >> Delegate Methods 委托方法

    委托方法是那些在特定事件发生时可被对象调用,并声明在对象的委托类中的方法。它们有独特的命名约定,这些命名约定同样也适用于对象的数据源方法。

    ● 名称以标示发送消息的对象的类名开头,省略类名的前缀并小写类第一个字符

    - (BOOL) tableView:(NSTableView *)tableView shouldSelectRow:(int)row;

    - (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;

    ● 冒号紧跟在类名之后(随后的那个参数表示委派的对象)。该规则不适用于只有一个 sender 参数的方法

    - (BOOL) applicationOpenUntitledFile:(NSApplication *)sender;

    ● 上面的那条规则也不适用于响应通知的方法。在这种情况下,方法的唯一参数表示通知对象

    - (void) windowDidChangeScreen:(NSNotification *)notification;

    ● 用于通知委托对象操作即将发生或已经发生的方法名中要使用 did 或 will

    - (void) browserDidScroll:(NSBrowser *)sender;

    - (NSUndoManager *) windowWillReturnUndoManager:(NSWindow *)window;

    ● 用于询问委托对象可否执行某操作的方法名中可使用 did 或 will,但最好使用 should 

    - (BOOL) windowShouldClose:(id)sender;


    >> Collection Methods 集合方法

    管理对象(集合中的对象被称之为元素)的集合类,约定要具备如下形式的方法:

    - (void) addElement:(elementType)adObj;

    - (void) removeElement:(elementType)anObj;

    - (NSArray *)elements;


    例如:

    - (void) addLayoutManager:(NSLayoutManager *)adObj;

    - (void) removeLayoutManager:(NSLayoutManager *)anObj;

    - (NSArray *)layoutManagers;


    集合方法命名有如下一些限制和约定:

    ● 如果集合中的元素无序,返回 NSSet,而不是 NSArray 

    ● 如果将元素插入指定位置的功能很重要,则需具备如下方法:

    - (void) insertElement:(elementType)anObj atIndex:(int)index;

    - (void) removeElementAtIndex:(int)index;


    集合方法的实现要考虑如下细节:

    ● 以上集合类方法通常负责管理元素的所有者关系,在 add 或 insert 的实现代码里会 retain 元素,在 remove 的实现代码中会 release 元素

    ● 当被插入的对象需要持有指向集合对象的指针时,通常使用 set... 来命名其设置该指针的方法,且不要 retain 集合对象。比如上面的 insertLayerManager:atIndex: 这种情形,NSLayoutManager 类使用如下方法:

    - (void) setTextStorage:(NSTextStorage *)textStorage;

    - (NSTextStorage *)textStorage;


    通常你不会直接调用 setTextStorage:,而是覆写它。


    另一个关于集合约定的例子来自 NSWindow 类:

    - (void) addChildWindow:(NSWindow *)childWin ordered:(NSWindowOrderingMode)place;

    - (void) removeChildWindow:(NSWindow *)childWin;

    - (NSArray *)childWindows;

    - (NSWindow *) parentWindow;

    - (void) setParentWindow:(NSWindow *)window;


    >> Method Arguments 方法参数

    命名方法参数时要考虑如下规则:

    ● 如同方法名,参数名小写第一个单词的首字符,大写后继单词的首字符。如:removeObject:(id)anObject

    ● 不要在参数名中使用 pointer 或 ptr,让参数的类型来说明它是指针

    ● 避免使用 one, two,...,作为参数名

    ● 避免为节省几个字符而缩写 

    按照 Cocoa 惯例,以下关键字与参数联合使用:

    ...action:(SEL)aSelector

    ..alignment:(int)mode

    ...atIndex:(int)index

    ...content:(NSRect)aRect

    ...doubleValue:(double)aDouble

    ...floatValue:(float)aFloat

    ...font:(NSFont *)fontObj

    ...frame:(NSRect)frameRect

    ...intValue:(int)anInt

    ...keyEquivalent:(NSString *0charCode

    ...length:(int)numBytes

    ...point:(NSPoint)aPoint

    ...stringValue:(NSString *)aString

    ...tag:(int)anInt

    ...target:(id)anObject

    ...title:(NSString *)aString


    >> Private Methods 私有方法

    大多数情况下,私有方法命名相同与公共方法命名约定相同,但通常我们约定给私有方法添加前缀,以便与公共方法区分开来。即使这样,私有方法的名称很容易导致特别的问题。当你设计一个继承自 Cocoa framework 某个类的子类时,你无法知道你的私有方法是否不小心覆盖了框架中基类的同名方法。

    Cocoa framework 的私有方法名称通常以下划线作为前缀(如:_fooData),以标示其私有属性。基于这样的事实,遵循以下两条建议:

    ● 不要使用下划线作为你自己的私有方法名称的前缀,Apple 保留这种用法。

    ● 若要继承 Cocoa framework 中一个超大的类(如:NSView),并且想要使你的私有方法名称与基类中的区别开来,你可以为你的私有方法名称添加你自己的前缀。这个前缀应该具有唯一性,如基于你公司的名称,或工程的名称,并以“XX_”形式给出。比如你的工程名为"Byte Flogger",那么就可以是“BF_addObject:”


    尽管为私有方法名称添加前缀的建议与前面类中方法命名的约定冲突,这里的意图有所不同:为了防止不小心地覆盖基类中的私有方法。


    > Naming Functions 函数命名

    Objective-C 允许通过函数(C形式的函数)描述行为,就如成员方法一样。 你应当优先使用函数,而不是类方法,如果隐含的类为单例或在处理函数子系统时。


    函数命名应该遵循如下几条规则:

    ● 函数命名与方法命名相似,但有几点不同:

    • 它们有前缀,其前缀与你使用的类和常量的前缀相同
    • 大写前缀后紧跟的第一个单词首字符

    ● 大多数函数名称以动词开头,这个动词描述该函数的行为

    NSHighlightRect

    NSDeallocateObject


    查询属性的函数有个更多的规则要遵循:

    ● 查询第一个参数的属性的函数,省略动词

    unsigned int NSEventMaskFromType(NSEventType type)

    float NSHeight(NSRect rect)


    ● 返回值为引用的方法,使用 Get

    const char *NSGetSizeAndAlignment(const char *typePtr, unsigned int *sizep, unsigned int *alignp)


    ● 返回 boolean 值的函数,名称使用判断动词 is/does 开头 

    BOOL NSDecimalIsNotANumber(const NSDecimal *decimal)


    > Naming Instance Variables and Data Types 实例变量与数据类型命名

    这一节描述实例变量,常量,异常以及通知的命名约定。

    >> Instance Variables 实例变量

    在为类添加实例变量是要注意:

    ● 避免创建 public 实例变量

    ● 使用 @private,@protected 显式限定实例变量的访问权限

    ● 确保实例变量名简明扼要地描述了它所代表的属性

    如果实例变量别设计为可被访问的,确保编写了访问方法

    >> Constants 常量

    常量命名规则根据常量创建的方式不同而大不同。

    >>> 枚举常量

    ● 使用枚举来定义一组相关的整数常量

    ● 枚举常量与其 typedef 命名遵守函数命名规则。如:来自 NSMatrix.h 中的例子:(本例中的 typedef tag(_NSMatrixMode)不是必须的)

    typedef enum _NSMatrixMode {

        NSRadioModeMatrix       = 0,

        NSHighlightModeMatrix = 1;

        NSListModeMatrix           = 2,

        NSTrackModeMatrix        = 3

    } NSMatrixMode;


    ● 位掩码常量可以使用不具名枚举。如:

    enum {

        NSBorderlessWindowMask         = 0,

        NSTitledWindowMask                 = 1 << 0,

        NSClosableWindowMask            = 1 << 1,

        NSMiniaturizableWindowMask  = 1 << 2,

        NSResizableWindowMask          = 1 << 3

    };


    >>> const 常量

    ● 使用 const 来修饰浮点常量或彼此没有关联的整数常量 

    ● 枚举常量命名规则与函数命名规则相同。const 常量命名范例:

    const float NSLightGray;


    >>> 其他常量

    ● 通常不使用 #define 来创建常量。如上面所述,整数常量请使用枚举,浮点数常量请使用 const

    ● 使用大写字母来定义预处理编译宏。如:#ifdef DEBUG

    ● 编译器定义的宏名首尾都有双下划线。如:__MACH__

    ● 为 notification 名及 dictionary key 定义字符串常量,从而能够利用编译器的拼写检查,减少书写错误。Cocoa  框架提供了很多这样的范例:

    APPKIT_EXTERN NSString *NSPrintCopies;

    实际的字符串值在实现文件中赋予。(注意:APPKIT_EXTERN 宏等价于Objective-C 中 extern)


    >> Exceptions and Notifications 异常与通知

    异常与通知的命名遵循相似的规则,但是它们有各自推荐的使用模式。

    >>> 异常

    虽然你可以处于任何目的而使用异常(由 NSException 类及相关类实现),Cocoa 通常不使用异常来处理常规的,可预料的错误。在这些情形下,使用诸如 nil, NULL, NO或错误代码之类的返回值。异常的典型应用类似数组越界之类的编程错误。

    异常由具有如下形式的全局 NSString 对象标识:

    [Prefix] + UniquePartOfName + Exception

    UniquePartOfName 部分是有连续的首字符大写的单词组成。例如:

    NSColorListIOException

    NSColorListNotEditableException

    NSDraggingException

    NSFontUnavailableException

    NSIllegalSelectorException


    >>> 通知

    如果一个类有委托,那它的大部分通知可能由其委托的委托方法来处理。这些通知的名称应该能够反应其响应的委托方法。比如,当应用程序提交 NSApplicationDidBecomeActiveNotification 通知时,全局 NSApplication 对象的委托会注册从而能够接收 applicaitonDidBecomeActive: 消息。

    通知由具有如下形式的全局 NSString 对象标识:

    [相关联类的名称] + [Did 或 Will] + [UniquePartOfName] + Notification

    例如:

    NSApplicationDidBecomeActiveNotification

    NSWindowDidMiniaturizeNotification

    NSTextViewDidChangeSelectionNotification

    NSColorPanelColorDidChangeNotification


    > 可接受的缩略语

    在设计编程接口时,通常名称不要缩写。然而,下面列出的缩写要么是固定下来的要么是过去被广泛使用的,所以你可以继续使用。关于缩写有一些额外的注意事项:

    ● 标准 C 库中长期使用的缩写形式是可以接受的。如:"alloc","getc"

    ● 你可以在参数名中更自由地使用缩写。如:imageRep,col(column),obj,otherWin

    常见的缩写

    缩写

    含义

    缩写

    含义

    alloc

    Allocate

    msg

    Message

    alt

    Alternate

    nib

    Interface Builder archive

    app

    Application

    pboard

    Pasteboard

    calc

    Calculate

    rect

    Rectangle

    dealloc

    Deallocate

    Rep

    Representation

    func

    Function

    temp

    Temporary

    horiz

    Horizontal

    vert

    Vertical

    info

    Information

    init

    Initialize

    max

    Maximum




    常见的缩写:

    ASCII,PDF,XML,HTML,URL,RTF,HTTP,TIFF

    JPG,GIF,LZW,ROM,RGB,CMYK,MIDI,FTP


    > 框架开发者小贴士与技巧

    >> Initialize 初始化 

    >>> 类初始化

    在 initialize 类方法中,能够编写实现一些延迟执行且只被一次的代码,initialize 类方法是由运行时系统在该类响应任何其他消息之前调用的。典型的应用是在其中设置类的版本信息。运行时系统向每个类发送 initialize 消息,即使该类没有实现 initialize,也会调用其基类的某个 initialize 方法。因此一个类的 initialize 方法可能会因为存在继承类的缘故被执行多次。因此有必要使用一定的技巧来防止只执行一次的代码被多次执行。如:NSFoo 类的 initialize 方法实现可能如下:

    + (id) initialize

    {

        if (self == [NSFoo class])

        {

            // 初始化代码

        }

        return self;

    }

    不应当显式调用 initialize 方法。如果你需要激活 initialize 方法,使用 [NSFoo self] 形式的调用。

    Ref:
    Coding Guidelines for Cocoa


    展开全文
  • Cocoa pod

    2020-11-25 16:48:38
    <div><p>Please add a cocoa pod to this project.</p><p>该提问来源于开源项目:TanguyAladenise/BBBadgeBarButtonItem</p></div>
  • Port COCOA to rely on DD4hep

    2020-11-22 08:48:17
    <div><p>Moved COCOA DD dependencies to DD4hep. As discussed in https://github.com/cms-sw/cmssw/pull/25356. </p> <p><strong>General description of COCOA: ...COCOA is now basically standalone alignment ...
  • [Cocoa]深入浅出 Cocoa 之消息

    万次阅读 2011-08-15 17:44:04
    深入浅出 Cocoa 之消息  罗朝辉(http://blog.csdn.net/kesalin) 转载请注明出处 在入门级别的ObjC 教程中,我们常对从C++或Java 或其他面向对象语言转过来的程序员说,ObjC 中的方法调用(ObjC中的术语为...
  • Cocoa/Cocoa Touch

    2016-06-22 16:50:54
    对比描述CocoaCocoa Touch
  • cocoacocoaTouch

    2017-01-18 15:05:26
    1.cocoacocoa Touch Cocoa包含Foundation和AppKit框架,可用于开发Mac OS X系统的应用程序。 Cocoa Touch包含Foundation和UIKit框架,可用于开发iPhone OS系统的应用程序。 Cocoa是 Mac OS X 的...
  • Cocoa-Cocoa框架

    2019-10-05 03:39:34
    1、Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境。 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa...
  • CocoaCocoa Touch

    2013-07-05 15:49:55
    CocoaCocoa Touch Cocoa 是在Mac OS X系统上原生的一个编译环境。他包含两个框架,其实就是一系列的类库,Foundation和AppKit。 在你的iPhone等掌上设备上,使用的则是他的一个子类 - Cocoa Touch
  • [Cocoa]深入浅出 Cocoa 之 Plugin

    千次阅读 2011-10-28 13:35:19
    深入浅出 Cocoa 之 Plugin 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前文 深入浅出 Cocoa 之 Framework中讲解了 Framework,接下来讲解 plugin。如果你对 Framework 还不太熟悉的话,请...
  • [Cocoa]深入浅出 Cocoa 之 Framework

    万次阅读 2011-10-16 13:43:27
    [Cocoa]深入浅出 Cocoa 之 Framework 罗朝辉(http://blog.csdn.net/kesalin/) CC许可,转载请注明出处 Framework 简介 Mac OS X 扩展了 framework 的功能,让我们能够利用它来共享代码和资源
  • 教程名称:Cocoa开发框架基础指南课程目录:【】Cocoa programming for mac os x 3rd 翻译版高清晰版(仅18章)【】Cocoa Touch for iPhone OS 3 (pdf 书及源代码)【】Cocoa 开发框架概述【】Cocoa入门学习【】Cocoa...
  • Cocoa error 258

    2020-11-27 17:52:34
    <div><p>When loading my view, I get this error: <p>Received error rendering template: Error Domain... (Cocoa error 258.)"</p><p>该提问来源于开源项目:youtube/youtube-ios-player-helper</p></div>
  • [Cocoa]深入浅出Cocoa之 Method Swizzling

    千次阅读 2012-01-05 17:01:08
    [Cocoa]深入浅出Cocoa之 Method Swizzling 罗朝辉(http://blog.csdn.net/kesalin) CC许可,转载请注明出处 在前文深入浅出Cocoa之消息中,我简要介绍了ObjC 中消息的基本情况,包括SEL查找,缓存以及消息转发等。...

空空如也

1 2 3 4 5 ... 20
收藏数 14,750
精华内容 5,900
热门标签
关键字:

cocoa