Objective-C 对象和类

前言

今天系统的学习一下Objective-C里的对象和类,设计的内容比较多,所以这一篇可能特别长


基础概念

类的独特存在就是一个实例,对实例执行的操作称为方法。对象是类的独特表示,每个对象都包含一些通常对该对象来说是私有的数据。方法提供访问和改变这些数据的手段。

Objective-C采用特定的语法对类和实例应用方法:[ ClassOrInstanc method];。请求一个类或实例来执行某个操作时,就是在向它发送一条消息。

接下来,我们通过一个实例来介绍类的一些基本概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 使用分数的程序

#import <Foundation/Foundation.h>

//---- @interface 部分 ----

@interface Fraction: NSObject

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

//---- @implementation 部分 ----

@implementation Fraction
{
int numerator;
int denominator;
}

-(void) print {
NSLog (@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int)n {
numerator = n;
}

-(void) setDenominator: (int)d {
denominator = d;
}

@end

//---- program 部分 ----
int main (int argc, char* argv[]) {
@autoreleasepool {
Fraction *myFraction = [[Fraction alloc] init];
[myFraction setNumerator: 1];
[myFraction setDenoominator: 3];
[myFraction print];
}
return 0;
}

整个实例在逻辑上分为以下3部分:

  • @interface部分
  • @implementation部分
  • program部分

其中,@interface部分用于描述类和类的方法;@implementation部分用于描述数据(类对象的实例变量存储的数据),并实现在接口声明方法的实际代码。

@interface部分

定义新类时,首先需要告诉Objective-C编译器该类来自何处,即必须定义类继承自哪个父类。类方法开头的负号(-)表示该方法是一个类实例方法。如果是正号(+),则表示方法是类方法。类方法是对类本身执行某些操作的方法,例如,创建类的新实例。

返回值

声明新方法时,必须告诉Objective-C编译器该方法是否有返回值,如果有返回值,是哪种类型。要做到这一点,需要将返回类型放入开头的负号或者正号之后的圆括号,因此,声明

1
2
-(int) currentAge;
+(double) retrieveDoubleValue;

如果方法不返回值,可用void类型指明,语句如下:

1
-(void) print

@implementation部分

@implementation部分包含生命在@interface部分的方法的实际代码,且需要制定存储在类对象中的数据类型。@implementation部分的一般格式如下:

1
2
3
4
5
6
@implementation NewClassName {
memberDeclarations;
}

methodDefinitions;
@end

memberDeclarations部分声明的成员称为实例变量。每次创建新的对象时,将同时创建一组新的实例变量,而且是唯一的一组。

属性

Objective-C 2.0开始,可自动生成设置值方法和取值方法。在接口部分中使用@property指令标识属性,属性的命名与实例变量相同。Objective-C允许使用点运算符访问属性:

1
myFraction.numerator

具有多个参数的方法


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!