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使用介绍) ...
随机推荐
- 这些年常用的WEB开发工具和技术, 学会一半你找工作没问题
前言: 技术选型并不是一成不变的,需要根据技术的发展.项目实际情况和人员技能构成实际考虑,在此列出的只是这些年常用的. 开发环境 1. 主要开发语言:Java7, HTML, Javascript等 ...
- \Process(sqlservr)\% Processor Time 计数器飙高
计数器" \Process(sqlservr)\% Processor Time",是经常监测,看看SQL Server如何消耗CPU资源.sqlserver是如何利用现有的资源; ...
- Netty入门之客户端与服务端通信(二)
Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...
- angular4.0微信oAuth第三方认证的正确方式
当我们的项目运行在微信端时,用到oAuth第三方认证.问题来了,在ng4中微信认证应该放在哪里呢? 开始项目的时候,我将oAuth认证放在了每个页面模版中,发现返回历史页的时候,需要返回两次. 这个问 ...
- CommonJS, AMD ,CMD之间的关系
commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 其中,amd先提出,cmd是根据commonjs和amd基础上提出 ...
- canvas 简易的加载进度条
做一个web app,想在第一次或者更新的时候,有一个更新进度条,我个人比较喜欢圆的那种. canvas + svg高低配,应该还不错的.顺便一提,canvas用来压缩图片也是么么哒的. 先看下效果图 ...
- 初读"Thinking in Java"读书笔记之第二章 --- 一切都是对象
用引用操纵对象 Java里一切都被视为对象,通过操纵对象的一个"引用"来操纵对象. 例如, 可以将遥控器视为引用,电视机视为对象. 创建一个引用,不一定需要有一个对象与之关联,但此 ...
- 《JAVA程序设计与实例》记录与归纳--类与对象
类与对象 概念贴士: 1. 类必须先定义了才能使用.类是创建对象的模板,创建对象也叫类的实例化. 2. 在Java中,使用new关键字来创建对象,一般有一下3个步骤: 1)声 明:声明一个对象,包 ...
- LVS三种模式分析(超详细)
1.DR模式:(Direct Routing)直接路由模式 DR模式的网络拓扑: DR模式的工作过程: 1.当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-se ...
- 你不知道的JSON.stringify和JSON.parse
json是JavaScript 对象表示法(JavaScript Object Notation),是一种简单的数据格式,类似于XML,其格式为名称/值对,数据用逗号隔开,名称必须用双引号括起来.例如 ...