Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

2014-11-24 11:55:03 · 作者: · 浏览: 2

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。


判断对象类型


-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例


-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例


我们试试这两个方法的使用。






打印结果:


2012-07-04 14:23:07.965 ObjectiveCTest[2460:f803] teacher Teacher类的成员


只有第一个判断打印出来,isMemberOfClass判断是否是属于这类的实例,是否跟父类有关系他不管。



2012-07-04 14:34:17.315 ObjectiveCTest[2595:f803] teacher Teacher类或Teacher的子类


2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher Person类或Person的子类


2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher NSObject类或NSObject的子类


+(BOOL) instancesRespondToSelector: 判断类是否有这个方法。此方法是类方法,不能用在类的对象


这里不写对象的创建和释放了,参考上面的代码




2012-07-04 14:39:49.853 ObjectiveCTest[2723:f803] teacher responds to setSize: method


2012-07-04 14:39:49.854 ObjectiveCTest[2723:f803] teacher class responds to alloc method


中间的那个判断我随便写了个selector,当然没有了。respondsToSelector 检查类方法 alloc返回YES



3、Objective-C的id类型



下面看看使用,


先把Teacher类中的 teach方法修改一下,改成



-(void)teach


{


NSLog(@"%@ 教数学" ,name);


}