Java接口与Objective- C正式协议类似,因为它们都需要实现一组方法。Java具有抽象类,但Objective-C没有。Java具有类变量,但在Objective-C中, 可以使用文件范围内的全局变量并为它们提供对应的访问器。Objective-C的公共和私有方法的形式比较松散。我们已经说过,在Objective- C中,对象支持的任何方法都可以被调用,即使它们没有以任何外部形式出现。Java允许声明final类,阻止更改其中的任何子类。而 Objective-C则与此相反,允许在运行时向任何类添加方法。

通常,Objective-C中类的实现方式可以分成两个文件:头文件和自身的实现文 件。但并不是一定要这样划分。头文件保留类的公开信息,例如使用此类的代码将使用的任何新的枚举、类型、结构,以及代码。其它代码段使用预处理器导入该文 件。Java中缺少C预处理器。C预处理器是一种文本替换工具,它能在C、Objective-C和C++源代码进行编译器之前,先对象它们进行自动处 理。以#开头的指令表示一个预处理器命令。C预处理器实际上并不知道C语言家族的具体机制,它只是完成一些看不见的文本替换工作。预处理器是一个功能非常 强大但又危险的工具。

在Java中,几乎所有错误都是通过异常来处理的。而在Objective-C中,错误 处理的方式取决于所使用的API。Unix API通常会返回值-1和一个全局错误编号(errno),以设置某个特定的错误。Cocoa API 通常仅在编程人员出现错误或无法清除时才抛出异常。Objective-C语言提供的异常处理特性与Java及C++相似,采用@try、@catch和 @finally结构。

Objective-C中,空(零)对象使用nil表示。可以向nil对象发送消息,而不必担心出现NullPointerException异常。向nil对象发送的消息代表停止操作指令,因此,不必检查发送的消息是否为NULL。

Objective-C中,通过使用类别向现有类中添加方法,可以改变类的行为。Objective-C中没有类似于final的类。因为编译器需要知道超类定义的对象的大小,所以任何类只要包含子类头文件,就可以把它设置为子类 。

实际上,相对于Java而言,在Objective-C中很少使用子类化行为。因此,通 过类别和动态运行时机制,可以向任何对象发送任何消息,可以将某些功能放到含有较少功能的类中,也可以将功能放到最有意义的类中。例如,可以在 NSString上加入类别来添加反转字符串或删除所有空格等特性。然后可以在任何NSString类中调用该方法,无论调用来自何处。

一般来说,只有当创建某个全新的对象,或者需要从根本上改变某个对象的行为,或者由于类 不能实现某个功能而需要使用子类时,才需要在Cocoa中设置子类。例如,Cocoa使用NSView类构造用户界面组件,却无法实现它的 drawRect:方法。因此,需要设置NSView的子类并重写drawRect:方法来绘制视图。但对其它大多数对象,通常采用委托和数据源的方式。 由于Objective-C可以向任何对象发送任何消息,对象不必含有特定的子类或遵从特定的接口,这样,单个类就可以成为任意个不同对象的委托和数据 源。

因为类别中已经声明了数据源和委托方法,因此,不必实现所有的数据源和委托方法。在Objective-C中,Cocoa编程很少会用空存根方法,某些方法会在嵌入式对象中调用相同的方法来使编译器能够顺利地适应一种正式协议。

Objective-C基础教程学习笔记(附录)从Java转向Objective-C的更多相关文章

  1. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  2. 【学习笔记】Python基础教程学习笔记

    教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...

  3. 匿名内部类--毕向东java基础教程学习笔记

    1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类 ...

  4. 内部类--毕向东Java基础教程学习笔记

    内部类的访问规则 1. 内部类可以直接访问外部类的成员,包括私有. 之所以可以直接访问外部类的成员,是因为内部类中持有外部类的引用,格式:外部类名.this 2.外部类要访问内部类,必须建立内部类对象 ...

  5. 异常处理——毕向东Java基础教程学习笔记

    1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象.                        其实 ...

  6. 《嵌入式Linux基础教程学习笔记一》

    常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...

  7. Python基础教程学习笔记:第二章 列表和元组

    1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...

  8. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  9. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

随机推荐

  1. 进程管理工具htop/glances/dstat的使用

    进程管理工具htop/glances/dstat的使用 Linux中进程的相关知识 1.什么是进程呢? 通俗的来说进程是运行起来的程序.唯一标示进程的是进程描述符(PID). 2.进程的分类 1)根据 ...

  2. ssh的action校验内容输出

    当form里为input类型时,如<input type="text" name="manager.name" />,则在对应的jsp中要使用< ...

  3. Micropython实例之TPYBoard来电显示功能演示

    一.TPYBoardV702介绍 TPYBoardV702是目前市面上唯一支持通信通信功能的MicroPython开发板:支持Python3.0及以上版本直接运行.支持GPS+北斗双模通信.GPRS通 ...

  4. css多重边框

    一.使用box-shadow实现多重边框 html <div class="multiple"></div> css .multiple{ backgrou ...

  5. 浅析mongodb

    当爬取数据时候,我们可能需要缓存大量的数据,但是又无须任何复杂的连接操作,因此我们将选用NoSQL数据库,这种数据库比传统的关系型数据库更易于操作,这里我想主要说一下目前非常流行的MongoDB作为缓 ...

  6. windows 驱动开发入门——驱动中的数据结构

    最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...

  7. 到底啥事w3c标准

    W3C标准                                                                                               ...

  8. Linux架构浅谈

    以下图为基础: 最内层是硬件,最外层是用户常用的应用,比如说firefox浏览器,evolution查看邮件,一个计算流体模型等等.硬件是物质基础,而应用提供服务.但在两者之间,还要经过一番周折. 还 ...

  9. 利用JParticles制作粒子

    JParticles 2.0发布,打造炫酷的粒子 一. 介绍 JParticles 2.0发布之前叫Particleground.js, 相信有在用的朋友应该不会陌生, 关于1.x的介绍可以看这里 二 ...

  10. random seed()函数

    用seed()生成随机数字,生成的法则与seed内部的数字相关,如果数字相同,则生成的随机数是相同的. 刷题宝上面的题目: >>> import random >>> ...