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
- ObjC继承中判断类归属的问题
- 判断银行卡号的归属
- objc 中打印类的基本信息
- js中程序员的迷茫,this的归属问题
- iPhone开发中混用objc,c,c++的一些问题
- Objc中触摸处理阻塞时消息派送的问题
- Swift 中 Selector 方法的访问权限控制问题 @objc
- Java中子类在继承父类时所继承的属性和方法是和父类共用还是归属于自己
- ObjC学习3-类、继承、重载
- 王锦思谈钓鱼岛的归属问题
- objc的类加载
- 判断手机号码归属地的正则表达式
- Objc中block的实现
- ObjC中_cmd的用法
- OC中关于几个判断对象归属及消息可用性的方法
- C#中类的继承问题01
- C#中类的继承问题02
- C#中类的继承问题03
- oracle直接执行程序块
- Update
- freemarker 对null 的处理
- 作业4.21
- 解决make zImage时出现的Clock skew detected问题
- ObjC继承中判断类归属的问题
- 图解STM32 JLink 采用JTAG 模式和 SWD模式下载时引脚说明
- BeanUtils 的使用步骤
- LoadRunner - Browser Emulation
- 《雪国》&《湖》读后感
- 黑马程序员——c语言基础:函数
- bochs配置文件的一些说明
- ex10.1
- 50条大牛C++编程开发学习建议