OC-面向对象

面向对象编程 OOP(Object-Oriented Programming)

 

@interface Circle : NSObject {

ShapeColor fillColor;

ShapeRect bounds;

}

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

- (void) draw;

@end //Circle

在以上代码中的第一行代码如下

@interface Circle : NSObject

在Objective-C中只要看到@符号,就可以把它看成是对C语言的扩展。

@interface Circle告诉编辑器:“这是新类Circle的接口”

/*

@interface行中的NSObject告诉编译器,Circle类是基于NSObject类的,该语句表明每个Circle类都是一个NSObject,并且每个Circle类都将继承NSObject类定义的所有行为。

*/

声明完新类之后,我们将告诉编译器Circle对象需要的各种数据成员。

{

ShapeColor fillColor;

ShapeRect bounds;

}

在类声明中指定fillColor和bounds后,每次创建Circle对象,对象中都将包括这两个元素。因此,每个Circle类对象都将拥有自己的fillColor和bounds。fillColor和bounds的值称为Circle类的实例变量 (instance variable).

结尾处的花括号告诉编译器,我们为Circle类指定了实例变量

- (void) draw;

- (void)setFillColor: (ShapeColor) fillColor;

- (void)setBounds: (ShapeRect) bounds;

它们称为方法声明 (method declaration),

圆括号里面的是方法的返回类型。

- (void)setFillColor: (ShapeColor) fillColor;

- (void)setBounds: (ShapeRect) bounds;

Objective-C中有一种名为中缀符的语法技术,方法的名称及其参数都是在一起的,例如,你可以这样调用带一个参数的方法

[circle setFillColor: kRedColor];

带两个参数的方法调用如下所示:

[textThing setStringValue: @"hello there" color:kBlueColor];

setStringValue和color是参数的名称 @"hello there" 和 kBlueColor是被传递的参数。

"void"表明无返回值,":"则表示后面会出现参数

 

2. > 面向对象的核心是类和对象

类的定义分为两个部分: 接口部分和实现部分

接口部分:对外声明类的特征和行为

实现部分:行为的具体实现

类是一个抽象的概念,在实际开发中程序的运行是通过对象间的相互协作完成

对象是类的实例,通过类来创建对象

创建一个对象分为两个部分:

分配内存空间.>根据类中声明的实例变量为对象在堆区分配内存,并返回首地址

初始化.>为对象的实例变量设置初始值

Person *person = [[Person alloc] init];

以上代码包含了对象的创建与初始化

+ (instancetype)alloc;+表示类方法,只能由类来调用,instancetype返回值类型,可以用id类代替

- (instancetype)init;  - 表示对象方法,对象调用,instancetype返回值类型

instanetype和 id 的区别:

instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象

instancetype只能作为返回值和参数,id还可以用来定义变量

instancetype 会告诉编译器当前的类型,但id对于编译器却是无类型的,调用任何方法不会给出错误提示

 

posted @ 2016-02-24 19:36  DreamOfChina  阅读(181)  评论(0编辑  收藏  举报