您的位置:首页 > 其它

多态,动态类型,动态绑定

2015-04-30 00:15 218 查看
一、多态

相同的名称、不同的类。使不同的类共享相同的方法名称的能力。

二、动态绑定和id类型

id——通用的对象类型,可以用来存储属于任何类的对象。如:id dataValue;(不用加*号)

三、编译时和运行时检查

存储在id变量中的对象类型在编译时无法确定,所以一些测试推迟到运行时进行。

四、id数据类型与静态类型

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

使用动态类型调用一个方法,注意规则:如果在多个类中实现名称相同的方法,那么每个方法都必须符合各个参数的类型和返回值类型。

五、有关类的问题

NSObject类所支持的一些基本方法。
-(BOOL) isKindOf:class-object(判断对象是否是class-object或其子类的成员) (层次关系)
-(BOOL) isMenberOfClass:class-object(判断对象是否是class-object的成员)(直接成员关系)
-(BOOL) respondsToSelector:selector(判断对象是否能够响应selector所指定的方法)
+(BOOL) instancesRespondToSelector:selector(判断指定的类实例是否能响应selector所指定的方法)
+(BOOL) isSubclassOfClass:class-object(判断对象是否是指定类的子类)
-(id) performSelector:selector(应用selector指定的方法)
-(id) performSelector:selector withObject:object(应用selector指定的方法,传递参数object)
-(id) performSelector:selector withObject:object1 withObject:object2(应用selector指定的方法,传递参数object1和object2)


要根据类名或另一个对象生成一个类对象,可以向它发送class消息。如:要从名为myClass的类中获得类对象(class-object),可编写:[MyClass class];或者获取对象的类的信息[obj
class], if([obj1 class] == [obj2 class])

变量是否是类的实例:[obj isMemberOfClass:[MyClass class]]

类的实例是否响应方法:[MyClass instancesRespondeToSelector:@selctor(Method)]

对象响应方法

SEL action;

id object;

action = @selector(method);

if([object respondeToSelector:action]==YES) {

[object performSelector:action];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: