Objective-C在c语言的基础上增加了面向对象特性,都有哪些面向对象特性呢?

其中第一个最重要的特性是类和对象的实现。

Objective-C软件由许多对象构成,形成一个对象网络,对象之间通过发送消息交互。在Objective-C中一个对象通过调用另外对象对外公开的方法向其发送消息。每个对象在类的接口文件中声明自己的对外公共属性和行为。其它对象通过这些公共行为与该对象交互,如存取对象属性,或发送消息(调用其方法)来与对象交互。

1)、类的定义

类是对象的蓝图,类被用来描述任何一种类型对象的公共行为和属性。在Objective-C中,类的公共接口与类的实现分离,使用类接口规定 一个给定类型的对象打算如何被其它对象使用,即定义类实例和外部世界的公共接口,包括公共行为和属性。类接口和实现通常放在分离的文件中,以便用户仅需要知道公共接口就可以与该类的实例交互,类的接口放到以h为后缀的头文件中。

在Objective-C中,类支持单类继承,所有类之间构成了一个树状类继承图,最上面的根类为NSObject,任何类都直接或间接派生自NSObject。NSObject定义了其它类可以继承的大量特性,提供类的基本功能和类之间交互的基本行为。

定义类接口的语法为如下形式:

@interface SimpleClass : NSObject

@property NSString *firstName;

- (void)sayHello;

-(void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2;

@end

上面定义了一个名字为SimpleClass派生自NSObject的类。

类的公共属性和行为(方法)定义在@interface 声明内。

类的属性以@property关键字声明,指针类型的声明表明该属性为一个对象。

类的行为(方法)概念上与其它语言的标准函数类似,但在语法上相当不同。

Objective-C中类的行为(方法)声明比较特殊,前面以符号’-’或’+’开头,’-’开头指示的方法是一个实例方法,能被任何类的实例调用。’+’开头声明的方法指示是一个类方法,通常作为类的工厂方法使用。方法声明中如果包括多个参数,方法声明就包括以空格分开的 多个部分,有几个参数,就包括几个部分,每个参数一个部分,每个部分又以’:’分开,冒号前面的为方法名,冒号后面的为参数声明。方法的返回类型规定在第一部分方法名前面的圆括号中,可以为任意类型。

2)、类的实现

类的实现放到以m为后缀的文件中。类实现文件的基本语法类似如下:

#import "XYZPerson.h"

@implementation XYZPerson

- (void)sayHello {

NSLog(@"Hello, World!");

}

@end

类的实现文件中需要通过#import关键字输入类的接口文件,不以分号结尾。方法实现与c 语言功能定义类似,使用大括号来包含相关代码,并且方法名字必须与方法原型一致,包括方法名、参数和方法返回的类型。作为约定,方法名字应该以小心字母开始,在包含多个字的情况下,对于另外的每一个字的首字母要用大写字母开头。

3)、类本身也是对象

在Objective-C中,一个类本身也是一个对象,类对象的类型为Class,Class类型没有属性,但能够接收消息。类方法的标准使用是作为工厂方法使用。类方法以’+’开头,用来指示一个类方法。

4)、对象发送和接收消息

发送消息的语法为:

[someObject doSomething];

使用方括号来指示一条消息的发送,在方括号中左边为消息的接收对象someObject,在方括号中右边为发送的消息,即调用的接收对象的方法。

对象能够给自己发送消息,使用self指针,self指针引用当前接收对象。

对象通过super关键字也能够调用它的超类实现的方法。发送消息到super即调用继承琏的上级超类的一个方法实现。

5) 对象被动态创建

在对象使用前需要为其分配内存和初始化。在Objective-C中,对象在堆中动态分配。

NSObject根类提供一个类方法用来为对象分配内存,形式为:

  • (id)alloc;
  • alloc的返回类型为id,是在Objective-C的一个特定关键字,是一个指针类型,代表和指向一个任意类型的对象,概念上类似(NSObject *)。
  • alloc方法为对象分配内存,并设置对象的属性为0。
  • 对象的初始化方法是NSObject类定义的一个对象方法,形式为:
  • (id)init;

init方法确保对象属性在创建时有合适的初值。

如果一个方法返回一个对象指针,就可能实现方法的嵌套,前一个方法返回的对象作为接收对方调用其另外的方法,从而能够组合多个消息调用到一个句子中。

如下面例子一个句子就实现了一个对象的分配和初始化。

NSObject *newObject = [[NSObject alloc] init];

类通常提供类工厂方法用来实现对象的分配和初始化。

NSObject 类还提供了new方法用来实现对象的创建,效果上和调用alloc和 init相同。

一些类还允许使用更加简介的形式来创建对象。

如使用如下形式创建一个NSString。

NSString *someString = @"Hello, World!”;

其中@用来指示是一个对象。

效果上和如下调用类工厂方法相同;

NSString *someString = [NSString stringWithCString:"Hello, World!"                                  encoding:NSUTF8StringEncoding];

Objective-C使用指针来指向和跟踪一个对象,由于Objective-C是一个动态语言,对象的类型在运行时确定,使用指针时不用太关心指针指向的类类型。在发送消息时相关对象的正确的方法被正确确定。

id代表一个通用对象指针,可以用id 来声明一个对象。

对象变量声明时自动被设置为nil,代表没有地址的意义,语法上相当于c语言的null。但在Objective-C 中发送一个消息到nil是有意义的,只是什么事情也不做。


Objective-C的面向对象特性(一)的更多相关文章

  1. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  2. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  3. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  4. javascript进阶——面向对象特性

    面向对象的javascript是这门语言被设计出来时就考虑的问题,熟悉OOP编程的概念后,学习不同的语言都会发现不同语言的实现是不同的,javascript的面向对象特性与其他具有面向对象特性的语言的 ...

  5. C++对C语言的非面向对象特性扩充(3)

    今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...

  6. .NET面向对象特性之封装

    .NET面向对象特性之封装 面向对象的基本内容由:类.对象.属性.方法.字段构成. 面向对象的三大特性:继承.多态.封装. 关于面向对象的特性很多人都把目光转向了继承.多态和接口,却很少有人提及过封装 ...

  7. .NET面向对象特性之多态

    .NET面向对象特性之多态 前言 上一篇总结了面向对象三大特性之一的继承,再接再厉,这一章继续总结多态.同时把继承中涉及到多态的内容进一步补充扩展.可以说“继承”是多态的根基.但继承主要关注的是“共通 ...

  8. .NET面向对象特性之“继承”

    整体简介 1.理解继承——继承关系图 2.实现继承与接口多继承 3.new. virtual.override方法 4.抽象方法和抽象类的继承 5.继承的本质 6.继承的复用性.扩展性和安全性 7.多 ...

  9. TypeScript -- 面向对象特性

    .class关键字和类名就可以定义一个类 . 类的访问控制符--有三个,.] = ] = ] = ;.声明参数 .用接口声明方法 .理解模块--一个文件就是一个模块,就是这么个意思 ,不用想的多么高大 ...

随机推荐

  1. 关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题

    前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以 ...

  2. Spring入门介绍-AOP(三)

    AOP的概念 AOP是面向切面编程的缩写,它是一种编程的新思想.对我们经常提起的oop(面对对象编程)有一定的联系. AOP和OOP的关系 AOP可以说是oop的某一方便的补充,oop侧重于对静态的属 ...

  3. COM原理与实现之二: 聚合

    COM原理与实现之二: 聚合 C++没有同聚合等价的特性.聚合实际上是继承性的一种动态形式.而C++的继承总是静态的,是实现继承.COM是接口继承,通过聚合接口,可以做成动态配置. 研究COM,主要是 ...

  4. iOS9 中关闭ATS的方法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) iOS9中增加了系统的安全性,你会发现默认情况下打开非http ...

  5. Android Device Administration 设备管理器——实现一键锁屏

    Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊 ...

  6. Servlet之Listener监听器

    Servlet2.5规范共有8中Listener接口,6种Event类型 ServletContextListener接口 [接口方法] contextInitialized()与 contextDe ...

  7. Latex 表格内文字过长自动换行

    法一: [plain] view plaincopy \begin{tabular}{m{5cm}} 法二: [plain] view plaincopy \begin{tabular}{p{0.9\ ...

  8. [C++学习历程]基础部分 C++中的指针数组和结构

    作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/19938177 一.指针 对学习C++来说,指针是一项重要内容,以前,教 ...

  9. iOS学习新知识-加速计和陀螺仪

    一.CoreMotion框架介绍 我们知道有一些iOS的应用,会有一些特殊的要求,比如: 电子罗盘指南针之类的应用:让我们知道方向. 运动类型软件:让我们知道我们跑步多少公里. 社交软件中的摇一摇功能 ...

  10. 分布式进阶(一)Windows 7下硬盘安装Ubuntu 14.04图文教程

    Windows 7下硬盘安装Ubuntu 14.04图文教程 本人下载的是ubuntu-14.04.2-desktop-amd64.iso,经本人亲自测试的,折腾了一天的时间. 1)首先还是分区,在计 ...