cocoa_cocoapods - CSDN
精华内容
参与话题
  • Cocoa编程开发者手册,英文原版名为:Cocoa.Programming.Developers.Handbook 包含了英文原版和中文版两个文档,是关于Mac OS X上Cocoa API的指南,涵盖了从用户界面到网络编程各个方面的特性,并内置了附书源码,供...
  • Cocoa是什么???

    万次阅读 2013-10-11 10:12:26
    某次上班路上,同事问我:什么是Cocoa?当时楞了一下,对呀,什么是Cocoa?做了将近一年的iPhone应用开发,成天跟它打交道,竟然还不知道这是个什么东西。。。 一、什么是CocoaCocoa的来源 早些年,苹果公司启动...

    Cocoa是什么???

    作者:wangzz
    转载请注明出处
    如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢!

    某次上班路上,同事问我:什么是Cocoa?当时楞了一下,对呀,什么是Cocoa?做了将近一年的iPhone应用开发,成天跟它打交道,竟然还不知道这是个什么东西。。。

    一、什么是Cocoa

    ①Cocoa的来源

    早些年,苹果公司启动了Copland计划,致力于开发出自己的操作系统,可惜后来Copland计划逐渐的失控了,苹果公司最终决定放弃开发,转向从别的公司购买下 一个版本的Mac OS。在经过调查现存的操作系统之后,苹果公司选择了NextSTEP,因为NeXTSTEP很小,苹果1996年收购了Next整个公司。关于Next公司以及这段历史,对乔帮主感兴趣的同学可以google一下。

    NeXTSTEP内置许多库和工具,能让程序员以一种优雅的方式与窗口管理器进行交互,这些库叫做Framework,在1993年这些frameworks和工具被重新修改并重命名OpenStep,后来被重命名为Cocoa,大家应该知道为什么Cocoa的类都有着NS的前缀了吧。

    ②什么是Cocoa

    实时上,Cocoa(IOS上的叫Cocoa Touch)是一个面向对象的软件组件—---类的集成套件,它使开发者可以快速创建强壮和全功能的 Mac OS X (IOS)应用程序。

    Cocoa包含了很多框架,其中最最核心的有两个:
    (1)Foundation框架;

    Foundation框架包含所有和界面显示无关的类。
    (2)Application Kit(AppKit)框架(Cocoa Touch中叫UIKit框架)。

    Application Kit 框架包含实现图形的、事件驱动的用户界面需要的所有对象:窗口、对话框、按键、菜单、 滚动条、文本输入框----这个列表还在不断增加。

    Foundation 和 Application Kit (UIKit)框架在 Cocoa 开发中是必要的,其它框架则是辅助和可选的(我们也可以只用 Foundation 框架创建一个 Cocoa 程序,而不涉及其它框架,比如令行工具和 Internet 服务器就是这样的例子)。和所有框架一样,这两个框架不仅包含动态共享库(有时是几个兼容版本的库),还包含头文件、API文档、和相关的资源。

    除了这两个最核心的,Cocoa(Cocoa Touch)还有很多其他的框架,苹果和第三方厂商也随时会发布更多的框架,比如Cocoa Touch的Address Book UI框架(AddressBookUI.framework)、Game Kit框架(GameKit.framework)等等,我们在开发Cocoa程序的时候可以按照自己的实际需求添加这些框架

    二、Cocoa在Mac OS X中的位置

    ①Cocoa在整个Mac OS X架构中的位置


    从这幅图中可以看出:

    (1)还有两个和Cocoa级别相同的开发框架:Carbon,JDK。
    (2)Cocoa位于整个架构的顶端,其下还依赖很多别的框架。

    虽然 Cocoa 依赖于特定的框架,但它并不是仅仅“坐”在这些框架的上面。在某些情况下,Cocoa 和其它框架(比如 Carbon)是对等的,甚至可以实现一些其它对等框架不能实现的任务Cocoa 不仅仅是基础技术上面的一个面向对象的封装层

    ②另一种层级划分方式


    上面这个图把Mac OS X的架构分了四个部分:
    (1)User Experience,这个一般可以理解为Application.
    (2)Application Frameworks,这个理解为主要包括像Cocoa这样的组件。
    (3)Graphics and Media,这个理解为Application service和Core Service。
    (4)Darwin,这个就是Mac OS X的kernel。

    ③Cocoa和其它架构的依赖关系


    Cocoa 依赖的、或者通过类和方法为之提供访问通道的主要基础框架有 Core Foundation,Carbon,Core Graphics (Quartz),Launch Services,和 Print Core (打印子系统)。详细信息如下:


    (1)Core Foundation

    Foundation 框架的很多类都基于 Core Foundation 中对应的封装类型。它们 之间的这种紧密关系使“免费桥接”技术—即在兼容的Core Foundation和Foundation类型之间实现类型转换—成为可能。某些 Core Foundation 的实现又基于 Darwin 层的 BSD 部分。

    (2)Carbon

    Cocoa 使用了 Carbon 提供的某些服务,因为有些 Carbon 框架在 Core Services 和 Application Services 层中定位为系统级别的服务。作为例子,Carbon Core 就是这些框架中特别重 要的一个,Cocoa 使用了它提供的 File Manager(文件管理器)组件来进行不同文件系统表示之间的转换。

    (3)Core Graphics

    Cocoa 描画和图像处理类(相当自然且紧密地)基于 Core Graphics 框架,它实现了 Quartz 和窗口服务器组件。
    Launch Services。NSWorkspace 类负责向外提供 Launch Services 的潜在能力。Cocoa 还使用 Launch Services 提供的应用程序注册功能来获取与应用程序及文档相关联的图标。

    (4)Print Core

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

    此外,Cocoa 还使用 Carbon 环境的 Text Encoding Converter(文本编码转换器)服务来处理一些字符串编码转换。还有一些 Cocoa 方法向外提供 I/O Kit 框架、QuickDraw (QD)框架、 Apple Event (AE)框架、 和 ATS 框架的部分功能,分别用于进行电源管理、QuickDraw 描画、 Apple Event 处理、以及提供字体 支持。

    三、Cocoa程序只能通过Objective-C语言编写吗

    当然不是了。

    在开发 Cocoa 软件的时候,我们可以使用多种编程语言。基本的,也是官方推荐的语言是 Objective-C。Objective-C 拥有自己 的 Cocoa 运行环境,又是 ANSI C 的超集,它在 ANSI C 的语法和语义特性上(从 Smalltalk 派生而来)进行扩展,使之支持面向对象的编程,新增的规则简单而又易于学习和使用。由于 Objective-C 是基于 ANSI C 的,我们可以自由地将 C 代码直接和 Objective-C 代码混合在一起。而且我们的代码可以调用非 Cocoa 的编程接口中定义的所有函数,比如 Carbon 和 BSD。您甚至可以将 C++代码混合到 Cocoa 代码中,并将它们 连接在同一个执行文件中。

    同时Cocoa 还支持 Java,Cocoa 为此定义了一个平行的 Java 类库,并且实现 了一个将 Java 接口映射到 Objective-C 实现的桥机制。Cocoa 的 Java 支持使您可以将本地的 Java 对象 和 Cocoa 对象混合在一起使用(在某些限制下)。我们甚至可以用PyObjC,即Python/Objective-C桥来进行Cocoa编程。Python是一种解释性的、注重交互的、及面向对象的编程语言。PyObjC使Python对象可以向 Objective-C对象传递消息,就象传递给Python对象一样;同时还使Objective-C对象可以向Python对象传递消息。

    四、如何判断一个程序是不是Cocoa程序

    不知道同学们有没有想过这个问题。我们工作时只知道打开Xcode,新建工程,敲代码,编译运行,然后就告诉别人我刚刚写的这个就是Cocoa程序!

    是什么因素使一个程序成为 Cocoa 程序呢?肯定不是编程语言,因为在 Cocoa 开发中可以使用各种语言;也不是开发工具,因为在命令行上就可以创建 Cocoa 程序(虽然那会使开发过程变得复杂,且需要消耗大量时间)。那么,所有 Cocoa 程序的共同点是什么?是什么使它们变得与众不同?答案是这些程序都是由一些对象组成,而这些对象最终都是从 NSObject 这个根类继承下来的;还有,这些程序都是基于 Objective-C 运行时(runtime system)环境的。

    需要说明的是,上面的说法还需要做一点限制:

    首先,Cocoa 还有另一个根类,即 NSProxy。只是 NSProxy 很少用于 Cocoa 编程。其次,我们可以创建自己的根类,只是这需要很多工作(包括编写与 Objective-C 运行时环境进行交互的代码),为此花费时间可能是不值得的。

    五、除了Cocoa外还可以使用其它框架开发Mac OS X (IOS)程序吗

    答案也是肯定的。在本文的第二章节中我们说过,跟Cocoa处于同一级别的还有另外两个开发框架:Carbon和Java。我们可以使用Xcode利用Carbon模版和JDK来进行程序开发。只不过由于Cocoa的各种优点,官方并不推荐使用它们来进行开发工作,Carbon模版在iOS SDK 3.1之后的Xcode都不再提供了,JDK的API也不再更新。


    参考文档:

    Cocoa Fundamentals Guide

    https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002974-CH1-SW1


    展开全文
  • [奥莱理] 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 ...
  • Cocoa 框架

    2015-11-23 10:50:19
    Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助。 1、Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境。 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为...
    
    

    1、Cocoa是什么?

    Cocoa是OS X和 iOS操作系统的程序的运行环境。

    是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。Cocoa程序可以这么说,它是由一些对象组成,而这些对象的类最后都是继承于它们的根类 :NSObject。而且它们都是基于Objective-C运行环境的。

    1.1、Cocoa框架

    iOS中,Cocoa众多框架中最重要最基本的两个框架是:Foundation 和 UIKit。

    Foundation 和界面无关,也可以说和界面无关的类基本是Foundation框架的,和界面相关的是UIKit框架。

    这两个框架在系统中处于的位置如图:

    1.2、Foundation框架

    好吧,那我们看看两个框架的类组织架构图,第一个先看Foundation的,三个图,包括了Foundation所以的类,图中灰色的是iOS不支持的,灰色部分是OS X系统的。

      


    将上图Foundation框架中的类进行逻辑分类如下:

    1. 值对象
    2. 集合 
    3. 操作系统服务 包括下面三个:文件系统和URL   进程间通讯。 这个范畴中的大部分类代表不同的系统端口、套接字、和名字服务器,对实现底层的IPC很有用。NSPipe代表一个BSD管道,即一种进程间的单向通讯通道。   线程和子任务。 NSThread类使您可以创建多线程的程序,而各种锁(lock)类则为彼此竞争的线程在访问进程资源时提供各种控制机制。通过NSTask,您的程序可以分出      一个子进程来执行其它工作或进行进度监控。
    4. 通知
    5. 归档和序列化
    6. 表达式和条件判断
    7. Objective-C语言服务

    1.3 UIKit框架

    应用程序可以通过三种方式使用UIKit创建界面
    1.   在用户界面工具(interface Buidler)从对象库里 拖拽窗口,视图或者其他的对象使用。
    2.   用代码创建
    3.   通过继承UIView类或间接继承UIView类实现自定义用户界面

    框架类组织架构图:



    在图中可以看出,responder 类是图中最大分支的根类,UIResponder为处理响应事件和响应链 定义了界面和默认行为。当用户用手指滚动列表或者在虚拟键盘上输入时,UIKit就生成时间传送给UIResponder响应链,直到链中有对象处理这个事件。相应的核心对象,比如:UIApplication  ,UIWindow,UIView都直接或间接的从UIResponder继承。

     2、Cocoa对象

    2.1 Objective-C是面向对象的语言

    Objective-C和Java C++一样,有封装,继承,多态,重用。但是它不像C++那样有重载操作法、模版和多继承,也没有Java的垃圾回收机制。

    2.2 Objective-C的优点

    Objective-C语言有C++ Java等面向对象的特点,那是远远不能体现它的优点的。Objective-C的优点是它是动态的。动态能力有三种:

    动态类-运行时确定类的对象

    动态绑定-运行时确定要调用的方法

    动态加载--运行时为程序加载新的模块

    2.3 动态能力相关的isa指针

    每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是Objective-C对象的第一个成员变量,它就是isa指针。这个指针指向哪呢?它指向一个类对象(class object  记住它是个对象,是占用内存空间的一个变量,这个对象在编译的时候编译器就生成了,专门来描述某个类的定义),这个类对象包含了Objective-C对象的一些信息(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等等。这个包含信息就是Objective-C动态能力的根源了。

    那我们看看isa指针类型的数据结构是什么样的?如果抛开NSObject对象的其他的成员数据和变量,NSObject可以看成这样:

    1. @interface NSObject <NSObject> {  
    2.      Class    isa;  
    3. }   
    不考虑@interface关键字在编译时的作用,可以把NSObject更接近C语言结构表示为:

    1. struct NSObject{  
    2.    Class isa;  
    3.  }  
    Class是用typedef 定义的

    1. typedef struct objc_class *Class;  
    那NSObject可以这么写了

    1. struct NSObject{  
    2.   objc_class *isa  
    3. }  
    那objc_class的结构是什么样的呢?大概是这样的:

    1. struct objc_class {  
    2.      Class isa;  
    3.        
    4.      Class super_class;  
    5.        
    6.      const char *name;  
    7.        
    8.      long version;  
    9.      long info;  
    10.        
    11.      long instance_size;  
    12.      struct objc_ivar_list *ivars;  
    13.      struct objc_method_list **methodLists;   
    14.        
    15.      struct objc_cache *cache;  
    16.      struct objc_protocol_list *protocols;     
    17.  }  
    这里会看到,在这个结构体里还有一个isa指针,又是一重指向,是不是有种到了盗梦空间的感觉。不用紧张,take easy,不会有那么多层次的,这里的isa指针指向的是元类对象(metaclass object),带有元字,证明快到头了。那元对象有啥用呢?它用来存储的关于类的版本,名字,类方法等信息。所有的元类对象(metaclass object)都指向 NSObject的元类对象,到头还是NSObject。一共三次:类对象->元类对象->NSObject元类对象。

       为了得到整个类组织架构的信息,objc_class结构里定义了第二个成员变量Class super_class,它指向父类的类对象。说了这么多,可能关系缕不清楚,有道是一张图胜过千言万语


    图中可以看出,D3继承D2,D2继承D1,D1最终继承NSObject。下图从D3的一个对象开始,排列出D3 D2 D1 NSObject 类对象,元类对象等关系。


    图中的箭头都是指针的指向。

    2.4 根类 NSObject

    NSObject是大部分Objective-C类的根类,它没有父类。其它类继承NSObject,访问Objective-C运行时系统的基本接口,这样其他类的实例可以获得运行时的能力。


    2.4.1 根类和根类协议

    NSObject不但是个类名,NSObject也是个协议的名称,参考NSObject协议 , NSObject协议指定了根类必须实现的接口。

    2.4.2 根类的主要方法:

    •     分配、初始化、和复制:
    alloc和allocWithZone:方法用于从某内存区域中分配一个对象内存,并使对象指向其运行时的类定义。
    init方法是对象初始化。
    new是一个将简单的内存分配和初始化结合起来的方法。
    copy和copyWithZone:

    • 对象的保持和清理:
    retain方法增加对象的保持次数。
    release方法减少对象的保持次数。
    autorelease方法也是减少对象的保持次数,但是以推迟的方式。
    retainCount方法返回对当前的保持次数。
    dealloc方法由需要释放对象的实例变量以及释放动态分配的内存的类实现。
    • 内省和比较

    NSObjec有很多方法可以查询对象的运行时信息。这些内省方法有助于找出对象在类层次中的位置,确定对象是否实现特定的方法,以及测试对象是否遵循某种协议。下面是部分方法 
    superclass和class方法(实现为类和实例方法)分别以Class对象的形式返回接收者的父类和类。
    您可以通过isKindOfClass:和isMemberOfClass:方法来确定对象属于哪个类。后者用于测试接收者是否为指定类的实例。isSubclassOfClass:类方法则用于测试类的继承性。
    respondsToSelector:方法用于测试接收者是否实现由选择器参数标识的方法。instancesRespondToSelector:类方法则用于测试给定类的实例是否实现指定的方法。
    conformsToProtocol:方法用于测试接收者(对象或类)是否遵循给定的协议。
    isEqual:和hash方法用于对象的比较。
    description方法允许对象返回一个内容描述字符串;这个方法的输出经常用于调试(“print object”命令),以及在格式化字符串中和“%@”指示符一起表示对象。

    • 对象的编码和解码

    下面的方法和对象的编解码(作为归档过程的一部分)有关:
    encodeWithCoder:和initWithCoder:是NSCoding协议仅有的方法。前者使对象可以对其实例变量进行编码,后者则使对象可以根据解码过的实例变量对自身进行初始化。
    NSObject类中声明了一些于对象编码有关的方法:classForCoder:、replacementObjectForCoder:、和awakeAfterUsingCoder:。

    • 消息的转发

     forwardInvocation:允许一个对象将消息转发给另一个对象。

    • 消息的派发 

    在performSelector开头的一些方法允许你延迟后派发指定消息,而且可以将消息(同步或异步的消息)从辅助线程派发到主线程。

    2.5 Cocoa对象生命周期

    对象的四种内存管理方式,如下图所示

    •  对象的生命周期—简化视图


    • 保持接收到的对象


    • 拷贝接收到的对象


    • 自动释放池




    参考:

    1、http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf

    2、http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html

    3、http://www.cnblogs.com/csutanyu/archive/2011/12/12/Objective-C_memory_layout.html

    展开全文
  • Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助。1、Cocoa是什么?Cocoa是OS X和 iOS操作系统的程序的运行环境。是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中...

    Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助。

    1、Cocoa是什么?

    Cocoa是OS X和 iOS操作系统的程序的运行环境。

    是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。Cocoa程序可以这么说,它是由一些对象组成,而这些对象的类最后都是继承于它们的根类 :NSObject。而且它们都是基于Objective-C运行环境的。

    1.1、Cocoa框架

    iOS中,Cocoa众多框架中最重要最基本的两个框架是:Foundation 和 UIKit。

    Foundation 和界面无关,也可以说和界面无关的类基本是Foundation框架的,和界面相关的是UIKit框架。

    这两个框架在系统中处于的位置如图:

    1.2、Foundation框架

    好吧,那我们看看两个框架的类组织架构图,第一个先看Foundation的,三个图,包括了Foundation所以的类,图中灰色的是iOS不支持的,灰色部分是OS X系统的。

      


    将上图Foundation框架中的类进行逻辑分类如下:

    1. 值对象
    2. 集合 
    3. 操作系统服务 包括下面三个:文件系统和URL   进程间通讯。 这个范畴中的大部分类代表不同的系统端口、套接字、和名字服务器,对实现底层的IPC很有用。NSPipe代表一个BSD管道,即一种进程间的单向通讯通道。   线程和子任务。 NSThread类使您可以创建多线程的程序,而各种锁(lock)类则为彼此竞争的线程在访问进程资源时提供各种控制机制。通过NSTask,您的程序可以分出      一个子进程来执行其它工作或进行进度监控。
    4. 通知
    5. 归档和序列化
    6. 表达式和条件判断
    7. Objective-C语言服务

    1.3 UIKit框架

    应用程序可以通过三种方式使用UIKit创建界面
    1.   在用户界面工具(interface Buidler)从对象库里 拖拽窗口,视图或者其他的对象使用。
    2.   用代码创建
    3.   通过继承UIView类或间接继承UIView类实现自定义用户界面

    框架类组织架构图:



    在图中可以看出,responder 类是图中最大分支的根类,UIResponder为处理响应事件和响应链 定义了界面和默认行为。当用户用手指滚动列表或者在虚拟键盘上输入时,UIKit就生成时间传送给UIResponder响应链,直到链中有对象处理这个事件。相应的核心对象,比如:UIApplication  ,UIWindow,UIView都直接或间接的从UIResponder继承。

     2、Cocoa对象

    2.1 Objective-C是面向对象的语言

    Objective-C和Java C++一样,有封装,继承,多态,重用。但是它不像C++那样有重载操作法、模版和多继承,也没有Java的垃圾回收机制。

    2.2 Objective-C的优点

    Objective-C语言有C++ Java等面向对象的特点,那是远远不能体现它的优点的。Objective-C的优点是它是动态的。动态能力有三种:

    动态类-运行时确定类的对象

    动态绑定-运行时确定要调用的方法

    动态加载--运行时为程序加载新的模块

    2.3 动态能力相关的isa指针

    每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是Objective-C对象的第一个成员变量,它就是isa指针。这个指针指向哪呢?它指向一个类对象(class object  记住它是个对象,是占用内存空间的一个变量,这个对象在编译的时候编译器就生成了,专门来描述某个类的定义),这个类对象包含了Objective-C对象的一些信息(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等等。这个包含信息就是Objective-C动态能力的根源了。

    那我们看看isa指针类型的数据结构是什么样的?如果抛开NSObject对象的其他的成员数据和变量,NSObject可以看成这样:

    @interface NSObject <NSObject> {
         Class    isa;
    } 
    
    不考虑@interface关键字在编译时的作用,可以把NSObject更接近C语言结构表示为:

    struct NSObject{
       Class isa;
     }
    Class是用typedef 定义的

    typedef struct objc_class *Class;
    
    那NSObject可以这么写了

    struct NSObject{
      objc_class *isa
    }
    那objc_class的结构是什么样的呢?大概是这样的:

    struct objc_class {
         Class isa;
         
         Class super_class;
         
         const char *name;
         
         long version;
         long info;
         
         long instance_size;
         struct objc_ivar_list *ivars;
         struct objc_method_list **methodLists; 
         
         struct objc_cache *cache;
         struct objc_protocol_list *protocols;   
     }
    这里会看到,在这个结构体里还有一个isa指针,又是一重指向,是不是有种到了盗梦空间的感觉。不用紧张,take easy,不会有那么多层次的,这里的isa指针指向的是元类对象(metaclass object),带有元字,证明快到头了。那元对象有啥用呢?它用来存储的关于类的版本,名字,类方法等信息。所有的元类对象(metaclass object)都指向 NSObject的元类对象,到头还是NSObject。一共三次:类对象->元类对象->NSObject元类对象。

       为了得到整个类组织架构的信息,objc_class结构里定义了第二个成员变量Class super_class,它指向父类的类对象。说了这么多,可能关系缕不清楚,有道是一张图胜过千言万语


    图中可以看出,D3继承D2,D2继承D1,D1最终继承NSObject。下图从D3的一个对象开始,排列出D3 D2 D1 NSObject 类对象,元类对象等关系。


    图中的箭头都是指针的指向。

    2.4 根类 NSObject

    NSObject是大部分Objective-C类的根类,它没有父类。其它类继承NSObject,访问Objective-C运行时系统的基本接口,这样其他类的实例可以获得运行时的能力。


    2.4.1 根类和根类协议

    NSObject不但是个类名,NSObject也是个协议的名称,参考NSObject协议 , NSObject协议指定了根类必须实现的接口。

    2.4.2 根类的主要方法:

    •     分配、初始化、和复制:
    alloc和allocWithZone:方法用于从某内存区域中分配一个对象内存,并使对象指向其运行时的类定义。
    init方法是对象初始化。
    new是一个将简单的内存分配和初始化结合起来的方法。
    copy和copyWithZone:

    • 对象的保持和清理:
    retain方法增加对象的保持次数。
    release方法减少对象的保持次数。
    autorelease方法也是减少对象的保持次数,但是以推迟的方式。
    retainCount方法返回对当前的保持次数。
    dealloc方法由需要释放对象的实例变量以及释放动态分配的内存的类实现。
    • 内省和比较

    NSObjec有很多方法可以查询对象的运行时信息。这些内省方法有助于找出对象在类层次中的位置,确定对象是否实现特定的方法,以及测试对象是否遵循某种协议。下面是部分方法 
    superclass和class方法(实现为类和实例方法)分别以Class对象的形式返回接收者的父类和类。
    您可以通过isKindOfClass:和isMemberOfClass:方法来确定对象属于哪个类。后者用于测试接收者是否为指定类的实例。isSubclassOfClass:类方法则用于测试类的继承性。
    respondsToSelector:方法用于测试接收者是否实现由选择器参数标识的方法。instancesRespondToSelector:类方法则用于测试给定类的实例是否实现指定的方法。
    conformsToProtocol:方法用于测试接收者(对象或类)是否遵循给定的协议。
    isEqual:和hash方法用于对象的比较。
    description方法允许对象返回一个内容描述字符串;这个方法的输出经常用于调试(“print object”命令),以及在格式化字符串中和“%@”指示符一起表示对象。

    • 对象的编码和解码

    下面的方法和对象的编解码(作为归档过程的一部分)有关:
    encodeWithCoder:和initWithCoder:是NSCoding协议仅有的方法。前者使对象可以对其实例变量进行编码,后者则使对象可以根据解码过的实例变量对自身进行初始化。
    NSObject类中声明了一些于对象编码有关的方法:classForCoder:、replacementObjectForCoder:、和awakeAfterUsingCoder:。

    • 消息的转发

     forwardInvocation:允许一个对象将消息转发给另一个对象。

    • 消息的派发 

    在performSelector开头的一些方法允许你延迟后派发指定消息,而且可以将消息(同步或异步的消息)从辅助线程派发到主线程。

    2.5 Cocoa对象生命周期

    对象的四种内存管理方式,如下图所示

    •  对象的生命周期—简化视图


    • 保持接收到的对象


    • 拷贝接收到的对象


    • 自动释放池




    参考:

    1、http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf

    2、http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html

    3、http://www.cnblogs.com/csutanyu/archive/2011/12/12/Objective-C_memory_layout.html

    容芳志 (http://blog.csdn.net/totogo2010)

    本文遵循“署名-非商业用途-保持一致”创作公用协议

    展开全文
  • 深入浅出 Cocoa 系列

    万次阅读 2014-07-01 19:10:51
    深入浅出Cocoa系列 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 这是本人在研究 Cocoa 开发过程中写过的一些文章,涵盖 runtime,class, ...

    深入浅出Cocoa系列

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

    本文遵循“署名-非商业用途-保持一致”创作公用协议

    这是本人在研究 Cocoa 开发过程中写过的一些文章,涵盖 runtime,class, message,多线程,core data,网络,framework,plugin等各方面,还比较成系列,所以整理出来,贴在这里,希望对大家有帮助。文章错误之处,也希望大家指正。所有文章均遵循“署名-非商业用途-保持一致创作公用协议。


    本系列文章 pdf 打包下载:点此下载


    深入浅出Cocoa之类与对象

    深入浅出Cocoa 之动态创建类

    深入浅出Cocoa之消息

    深入浅出Cocoa之消息(二)-详解动态方法决议(Dynamic Method Resolution)

    深入浅出Cocoa之详解键值观察(KVO)及其实现机理


    深入浅出Cocoa之Method Swizzling

    深入浅出Cocoa之多线程NSThread

    深入浅出Cocoa多线程编程之block与dispatch quene

    [深入浅出Cocoa]Block编程值得注意的那些事儿

    深入浅出Cocoa之Bonjour网络编程

    深入浅出Cocoa之Framework

    深入浅出Cocoa之Plugin

    深入浅出Cocoa之Core Data(1)- 框架详解

    深入浅出Cocoa之Core Data(2)- 手动编写代码

    深入浅出Cocoa之Core Data(3)- 使用绑定

    深入浅出Cocoa之Core Data(4)- 使用绑定

    深入浅出iOS库之数据库 sqlite
    深入浅出iOS库之图形库 CorePlot

    深入浅出Cocoa之iOS程序性能优化

    展开全文
  • 这两天都遇到这个错误2次了 第一次是 ...property follows cocoa naming convention for returning 'owned' objects 查了一番,终于知道原因:命名不规范 ,属性不能以关键字符开头。记得以前刚学OC的时候看到过,不
  • #import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found 错误原因: Cocoa是Mac的库,在iOS上不支持. 解决办法: #import <Foundation/Foundation.h>
  • Cocoa Cocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具(通过命令行我们仍然可以开发Cocoa程序),它是创建Mac OS X和IOS程序的原生面向对象API,为这两者应用提供了编程环境。 我们通常...
  • MAC下用XCode开发Cocoa程序简单教程

    万次阅读 2013-10-14 15:16:06
    那么本篇简单入门下Cocoa application吧; 首先安装Xcode,这个东东,神器一样的东东不解释; OK,打开Xcode,创建一个项目;如下图:   一路下去后我们创建好了第一个cocoa application,虽然是个...
  • Cocoa 是在Mac OS X系统上原生的一个编译环境。他包含两个框架,其实就是一系列的类库,Foundation和AppKit。 在你的iPhone等掌上设备上,使用的则是他的一个子类 - Cocoa Touch。他所支持的...
  • Cocoa/Cocoa.h file not found

    千次阅读 2015-01-31 00:45:08
    创建OC类时,有时OC类会...这时报错:‘Cocoa/Cocoa.h' file not found 这个问题是因为Cocoa/Cocoa.h为OSX的库文件,而不时IOS的库文件,将其修改为 #import 问题解决。 不过,所有用用到NS***的都需要修改为UI***
  • https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Accessibility.html
  • 通过类比的方法来进行描述。 Objective-C类比于C++ ...Cocoa/Cocoa Touch类比于微软的类库,Cocoa用于Mac,Cocoa Touch用于iphone/ipad/itouch Foundation类比于微软的核心类库,比如Win32 API/
  • IOS 6 基础框架概览

    千次阅读 2012-12-30 01:06:33
    IOS 6 基础框架概览原文连接:《IOS6.0 学习第1篇...Mac与IOS的体系结构对比Mac:Cocoa、Media、Core Service、Core OSIos:Cocoa Touch、Media、Core Service、Core OS可以看出Ios和Mac的变化主要就在Cocoa Touch上面
  • 1、 2、 3、参考资料
  • You own any object you create You create an object using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy” (for example, alloc, newObject, or mutableCopy). ...
  • Swift入门第一天(踩坑)

    千次阅读 2017-03-17 11:11:17
    今天在Xcode中创建一个Playground文件时,默认的是import Cocoa,系统会提示No such module”Cocoa”。 原因很简单:在建立新的File文件的时候,选择的是“OS X”的项目,其实应该选择“iOS”的项目,将Cocoa改成...
  • Cocoa Core Competencies_0_序

    千次阅读 多人点赞 2015-03-04 22:58:27
    最近在iOS Developer Library里头学习, 收获挺多。不过官方文档都是英文, 看起来倒是挺费劲的。想必也有许多朋友在学习过程中遇到困难。所以萌生了翻译一些官方文档... Cocoa Core Competencies, 顾名思义 Cocoa核心概
  • CocoaCocoa Touch区别

    千次阅读 2017-07-25 11:22:45
    CocoaCocoa Touch区别之分是本文要介绍的内容,他们共同点就是二者都包含Objective-C运行时和两个核心框架:Cocoa包含Foundation和AppKit框架,可用于开发Mac OS X系统的应用程序。Cocoa Touch包含Foundation和...
1 2 3 4 5 ... 20
收藏数 56,944
精华内容 22,777
关键字:

cocoa