031.isKind 判断指针的实际类型

来源:互联网 发布:sql自定义函数 编辑:程序博客网 时间:2024/04/28 10:16
---------------  FKBase.h  ---------------
#import<Foundation/Foundation.h>
@interfaceFKBase : NSObject
- (
void) base;
- (
void) test;
@end
---------------  FKBase.m  ---------------
#import"FKBase.h"
@implementationFKBase
- (
void) base
{
     NSLog(@"父类的普通base方法");
}
- (
void) test
{
     NSLog(@"父类的将被覆盖的test方法");
}
@end
---------------  FKSubclass.h  ---------------
#import<Foundation/Foundation.h>
#import"FKBase.h"
@interfaceFKSubclass : FKBase
- (
void) sub;
@end
---------------  FKSubclass.m  ---------------
#import"FKSubclass.h"
@implementationFKSubclass
- (
void) test
{
     NSLog(@"子类的覆盖父类的test方法");
}
- (
void) sub
{
     NSLog(@"子类的sub方法");
}
@end
---------------  main.m ---------------
#import<Foundation/Foundation.h>
#import"FKSubclass.h"
intmain()
{
   
//声明hello时使用NSObject类,则hello的编译时类型是NSObject
   
// NSObject是所有类的父类, hello变量的实际类型是NSString
    NSObject* hello =
@"Hello";
   
//使用isKindOfClass判断该变量所指的对象是否为指定类、及其子类的实例
    NSLog(
@"字符串是否是NSObject类的实例:%d", ([hello isKindOfClass:[NSObject class]]));
    NSLog(
@"字符串是否是NSString类的实例:%d", ([hello isKindOfClass:[NSString class]]));
    NSLog(
@"字符串是否是NSDate类的实例:%d", ([hello isKindOfClass:[NSDate class]]));
    NSString* a =
@"Hello";
    NSLog(
@"a是否是NSDate类的实例:%d", ([a isKindOfClass:[NSDate class]]));
}

一、编写本节代码的具体步骤:
1.可仿照第二章001节的代码编写步骤,不同的是,本节代码要创建两个类。

二、本节代码涉及到的知识点:
1.-(BOOL)isKindOfClass:clazz: 判断该对象是否为clazz或其子类的实例。
2.-(BOOL)isSubclassOfClass:clazz: 判断该对象是否为clazz的子类的实例。
3.上面两个方法可以使用任何对象作为调用者,接着向该方法传入任意类,
  该方法将会返回一个BOOL类型的值,用于表明该变量实际指向对象的类型。
4.在执行强制类型转换之前,先判断一下前一个对象是否是该类的实例,是否可以成功转换。
0 0
原创粉丝点击