淘先锋技术网

首页 1 2 3 4 5 6 7

多态:相同的名称,不同的类


动态绑定和id类型

id数据类型,是一种通用的对象类型。也就是说,id可以用来存储属于任何类的对象。

id dataValue;

Fraction *f1 = [Faction new];

Complex *c1 = [Complex new];


[f1 setTo: 2 over: 5];

dataValue = f1;

[dataValue print];


[c1 setReal: 10.0 andImaginary: 2.5];

dataValue = c1;

[dataValue print];

Objective-C系统总是跟踪对象所属的类,先判断对象所属的类,然后在运行时确定需要动态调用的方法,而不是编译的时候。


编译时和运行时检查

id数据类型和静态类型

讲一个变量定义为特定类的对象时,使用的是静态类型。

编译检错


动态类型的参数和返回类型

有关类的问题

从名为square的类中获得类对象:

[Square class]

如果mySquare是Square对象的实例,可以通过如下嗲吗知道它所属的类:

[mySquare class]

要查看存储在变量obj1和obj2中的对象是不是相同的类实例,可以编写:

if ([obj1 class] == [obj2 class])

要查看变量myFraction是不是Fraction类的实例,可以编写:

[myFraction isMemberOfClass: [Fraction class]]

要查看Fraction类的实例是否响应setTo:over方法,可以编写:

[Fraction instancesRespondToSelector: @selector (setTo:over:)]


使用@try处理异常

Fraction *f = [Fraction new];

@try {

[f noSuchMethod];

}

@catch(NSException *exception) {

NSLog(@"Caught %@%@",[exception name],[exception reason]);

}