Objective-C基础教程学习笔记(附录)从Java转向Objective-C
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的更多相关文章
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
- 【学习笔记】Python基础教程学习笔记
教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...
- 匿名内部类--毕向东java基础教程学习笔记
1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类 ...
- 内部类--毕向东Java基础教程学习笔记
内部类的访问规则 1. 内部类可以直接访问外部类的成员,包括私有. 之所以可以直接访问外部类的成员,是因为内部类中持有外部类的引用,格式:外部类名.this 2.外部类要访问内部类,必须建立内部类对象 ...
- 异常处理——毕向东Java基础教程学习笔记
1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象. 其实 ...
- 《嵌入式Linux基础教程学习笔记一》
常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...
- Python基础教程学习笔记:第二章 列表和元组
1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
随机推荐
- SQL基础学习_04_视图
视图 1. 视图的创建 视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作: 由于 ...
- HY.Mail:C#简单、易用的邮件工具库
一.开发HY.Mail的初衷 Nuget或者github上有很多成熟且优秀的邮件库可以使用, 但是目前找到的使用都不够简洁或者不适合我的使用场景 我的场景是开发应用场景(例如系统通知.运维通知),而非 ...
- Composer创建和发送HTTP Request
Fiddler Composer的功能就是用来创建HTTP Request 然后发送. 你可以自定义一个Request, 也可以手写一个Request, 你甚至可以在Web会话列表中拖拽一个已有的Re ...
- angular4.0单个标签不能同时使用ngFor和ngIf
这个问题估计是ng4严格了语法规范的原因. 介于这篇太短,附上图助助兴致 解决办法: <div *ngFor="表达式"> <ng-container *ngIf ...
- Hadoop源码篇---解读Mapprer源码outPut输出
一.前述 上次讲完MapReduce的输入后,这次开始讲MapReduce的输出.注意MapReduce的原语很重要: "相同"的key为一组,调用一次reduce方法,方法内迭代 ...
- 类和对象的创建过程(元类,__new__,__init__,__call__)
一. type() 1.创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() pri ...
- 摸索出来的chrom调试前后台数据(Java&&Ajax)交互的方法分享一下咯!!!
1:开始没想分享的,后来看到有大佬分享如何使用Chrom的工具进行调试,哈哈哈哼,我就借着他的博客写一下我摸索的如何进行前后台数据交互吧(注:反正是自己瞎 捣鼓出来的,也许适合我,and我脑补一下吧, ...
- InnoDB锁机制
1. 锁类型 锁是数据库区别与文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问. InnoDB使用的锁类型,分别有: 共享锁(S)和排他锁(X) 意向锁(IS和IX) 自增长锁(AUTO-I ...
- 实体处理模块IEntityModule
在2015年7月16日,XCode新增了实体处理模块IEntityModule,用于拦截实体对象添删改操作. 该接口参考IHttpModule设计理念,横切在实体对象的关键生命周期之中,以达到多实体类 ...
- TLD算法概述--学习理解之(一)
liuyihai@126.com http://www.cnblogs.com/liuyihai/ TLD(Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生Zd ...