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编程很少会用空存根方法,某些方法会在嵌入式对象中调用相同的方法来使编译器能够顺利地适应一种正式协议。

java objective-c_Objective-C基础教程学习笔记(附录)从Java转向Objective-C相关推荐

  1. 黑马程序员最新版JavaWeb基础教程-学习笔记

    da@黑马程序员最新版JavaWeb基础教程-学习笔记 day06-HTML&CSS HTML HTML(HyperTest Markup Language):超文本标记语言 是一门语言,所有 ...

  2. linux磁盘符变化autofs,Linux基础教程学习笔记之Autofs自动挂载

    Linux基础教程学习笔记之Autofs自动挂载 Autofs自动挂载: yum -y install autofs vim /etc/auto.master  在文件中添加下面行 /home/gue ...

  3. 网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储

    Linux基础教程学习笔记28--使用Samba访问网络存储 SMB用于Windows和类Linux系统直接的文件共享 安装samba client包: [root@linuxidc~]# yum i ...

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

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

  5. 【莫烦Python】Python 基础教程——学习笔记

    文章目录 本笔记基于p1-p29[莫烦Python]Python 基础教程 大家可以根据代码内容和注释进行学习. 安装 我的:python3.8+anaconda+VS code print() pr ...

  6. Learn the object-c on MAC(中译本: Object-C 基础教程 ) 学习笔记

    [comments to this book]Object-C 基础教程 这本书翻译的水平很高,浅显易懂. 隐藏的self. 在使用instance method的时候,self会隐含的指向接收消息的 ...

  7. 二十一世纪大学英语读写基础教程学习笔记(原文)——5 - Shipwrecked in Antarctica(沉船南极洲)

    Unit 5 - Shipwrecked in Antarctica(沉船南极洲) Ernest Shackleton made many great achievements in his life ...

  8. 二十一世纪大学英语读写基础教程学习笔记(原文)——10 - The Future(未来)

    Unit 10 - The Future(未来) What will our future be like? What might happen in the year 2144? How far c ...

  9. 二十一世纪大学英语读写基础教程学习笔记(原文)——2 - It‘s a New Day(新的一天)

    Unit 2 - It's a New Day!(新的一天) In the following text, the writer tells us how we can manage to face ...

  10. python机器学习基础教程-学习笔记(一)

    了解 scikit-learn 及其用法是很重要的,但还有其他一些库也可以改善你的编程体验. scikit-learn 是基于 NumPy 和 SciPy 科学计算库的.此外,我们还会用到 panda ...

最新文章

  1. 这个CV数据集生成器火了,支持13类复杂CV任务,DeepMind谷歌MIT等打造丨开源
  2. go语言中没有隐藏的this指针
  3. vim插件推荐之indentLine
  4. 字符指针+结构体排序(后缀子串排序)
  5. 王哲:Cocos2d-x 3.0引擎带来了什么?
  6. JAVA中带有数字签名的XML安全性
  7. linux可平通网关但不能上网,redhat问题:能ping通网关和本网段的IP,但是不能ping通DNS,也不能上网...
  8. 深入了解EntityFramework——数据注解属性
  9. 15. 迭代器模式(Iterator Pattern)
  10. canvas 擦除动画_帧动画的多种实现方式与性能对比
  11. MySQL 字段类型解析
  12. 洛谷 P2647 最大收益
  13. pandas之交叉表crosstab()
  14. 项目组织结构以及模块规划
  15. metro样式开机启动菜单_如何在Windows 8中获取Metro风格的开始菜单和开始按钮
  16. AutoIt教程资源汇总
  17. 用 Python 编程,假设一年期定期利率为 3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番?
  18. oa办公系统都有哪家?
  19. 第二章:Swagger2
  20. java 日期类Date插入mysql数据库时间总是比参数时间少一天

热门文章

  1. oracle 12c权限设置,如何设置 Oracle 数据库权限
  2. Bing 和 Cortana 源码遭泄露,网友嘲讽:其实没人想要
  3. 寒武纪“动荡”的 6 周年:CTO 梁军离职,市值蒸发 59 亿,核心技术人才仅剩 3 人
  4. 如何设计一个能够扩展到百万用户的系统?
  5. 集中式还是分布式?账务类数据库架构的选型
  6. 图文分析:如何利用Google的protobuf,来思考、设计、实现自己的RPC框架
  7. 如何获取高质量 CV 训练数据?这个超详细上手教程不容错过
  8. 详解微软 ALUM:当语言模型遇到对抗训练
  9. 多线程中抛异常的这个面试题你会吗?
  10. 写给软件工程师的 30 条建议