ObjC继承中判断类归属的问题

来源:互联网 发布:炉石传说淘宝成品号 编辑:程序博客网 时间:2024/05/22 13:11

        ObjC的一个特点就是动态类型(Dynamic Types),比如一个id类型可以声明为任何对象的类型。这样就会出现一个问题,我们常常不知道某个对象到底是属于哪个类,或者某个对象是哪个类的子类,这时候怎么办呢?ObjC提供了一系列的方法来共我们调用判断~下表就显示了ObjC提供的一些方法:


然后我们可以写一个类和main函数来测测看。

////  Fraction.h//  FractionTest////  Created by Dirk Kim#import <Foundation/Foundation.h>// The Fraction class@interface Fraction : NSObject{    int numerator;    int denominator;}@property int numerator, denominator;-(void)      print;-(void)      setTo: (int) n over: (int) d;-(double)    convertToNum;// Add argument to receiver-(Fraction *) add: (Fraction *) f;@end
////  Fraction.m//  FractionTest////  Created by Dirk Kim#import "Fraction.h"@implementation Fraction@synthesize numerator, denominator;-(void) print{    if (numerator < 0)         NSLog(@"-(%i/%i)", -numerator, denominator);    else if (denominator < 0)        NSLog(@"-(%i/%i)", numerator, -denominator);    else        NSLog(@"(%i/%i)", numerator, denominator); }-(void) setTo: (int) n over: (int) d{    numerator   = n;    denominator = d;}-(double) convertToNum{    if (denominator != 0)        return (double) numerator / denominator;    else        return 1.0;}-(void) reduce{    int u = numerator;    int v = denominator;    int temp;        while (v != 0) {        temp = u % v;        u = v;        v = temp;    }        numerator   /= u;    denominator /= u;}-(Fraction *) add: (Fraction *) f{    // To add two fractions:    // a/b + c/d = ((a*d) + (b*c)) / b*d        // result will store the result of the addition    Fraction *result = [[Fraction alloc] init];    int       resultNum, resultDenom;        resultNum   = numerator * f.denominator + denominator * f.numerator;    resultDenom = denominator * f.denominator;        [result setTo: resultNum over: resultDenom];    [result reduce];        return result;}@end
#import "Fraction.h"int main (int argc, const char * argv[]){  @autoreleasepool {      Fraction * f1 = [[Fraction alloc] init];            if([f1 isMemberOfClass: [Fraction class]] == YES)          NSLog(@"it is a member of fraction class");      if([f1 isMemberOfClass: [NSObject class]] == NO)          NSLog(@"it is not a member of NSObject class");            if([f1 isKindOfClass: [NSObject class]] == YES)          NSLog(@"it is a kind of NSObject class");      if([f1 isKindOfClass: [Fraction class]] == YES)          NSLog(@"it is a kind of Fraction class");      if([f1 respondsToSelector: @selector (print)] == YES)          NSLog(@"it has a function of print");      if([f1 respondsToSelector: @selector (setTo:over:)] == YES)          NSLog(@"it has a function of setTo: over:");      if([f1 respondsToSelector: @selector (alloc)] == YES)          NSLog(@"it has a function of alloc");            if([Fraction instancesRespondToSelector: @selector (print)] == YES)          NSLog(@"Instance of it has a function of print");      if([Fraction isSubclassOfClass: [NSObject class]] == YES)          NSLog(@"it is a subclass of NSObject");       }  return 0;}


编译后,运行,得到的结果如下:





0 0
原创粉丝点击