//
////本例主要理解
//isMemberOfClass
//isKindOfClass
//respondsToSelector
//instancesRespondToSelector
//isSubclassOfClass
//的使用。其中
//isMemberOfClass 方法返回该实例是否为某类创建的对象
//isKindOfClass 方法返回实例是否为某类及其子类创建的对象
//respondsToSelector 方法返回实例是否含有@selector方法
//instancesRespondToSelector 方法返回该类是否有@selector方法
//isSubclassOfClass 方法返回A类是否为B类的子类
#import "Square.h"
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
Square *sq = [[Square alloc] initWithSide:7];
Rectangle *rec = [[Rectangle alloc] initWithWidth:5 andHeight:3];
NSLog(@"sqs area = %i",[sq area]);
NSLog(@"recs area =%i",[rec area]);
NSLog(@"sqs parimeter = %i",[sq perimeter]);
NSLog(@"recs parimeter = %i",[rec perimeter]);
if ([sq isMemberOfClass:[Square class]])
NSLog(@"sq is a member of square class");
if ([sq isMemberOfClass:[Rectangle class]])
NSLog(@"sq is a member of rectangle class");
else
NSLog(@"sq is not a member of rectangle class");
if ([sq isMemberOfClass:[NSObject class]])
NSLog(@"SQ is a member of nsobject class");
else
NSLog(@"SQ is not a member of nsobject class");
if ([sq isKindOfClass:[Square class]])
NSLog(@"sq is a kind of square class");
if ([sq isKindOfClass:[Rectangle class]])
NSLog(@"sq is a kind of rectangle class");
if ([sq isKindOfClass:[NSObject class]])
NSLog(@"SQ is a kind of nsobject class");
if ([sq respondsToSelector:@selector(setSide:)])
NSLog(@"sq response to [setSide] method.");
if ([sq respondsToSelector:@selector(setWidth:andHeight:)])
NSLog(@"sq response to [setWidth:andheight] method");
if ([sq respondsToSelector:@selector(alloc)])
NSLog(@"sq response to [alloc] method.");
else
NSLog(@"sq don't response to [alloc] method.");
if ([Rectangle instancesRespondToSelector:@selector(setSide:)])
NSLog(@"Rectangle response to [setSide:] method.");
else
NSLog(@"Rectangle don't response to [setSide:] method.");
if ([Square isSubclassOfClass:[Rectangle class]] )
NSLog(@"Square is a subclass of class Rectangle.");
}
return 0;
}
//rectangle.h
isMemberOfClass
isKindOfClass
respondsToSelector
instancesRespondToSelector
isSubclassOfClass
#import <Foundation/Foundation.h>
@interface Rectangle : NSObject
{
int width;
int height;
}
@property int width,height;
-(void)setWidth:(int)w andHeight:(int)h;
-(int)area;
-(int)perimeter;
-(id)initWithWidth:(int)w andHeight:(int)h;
@end
//rectangle.m
isMemberOfClass
isKindOfClass
respondsToSelector
instancesRespondToSelector
isSubclassOfClass
#import "Rectangle.h"
@implementation Rectangle
@synthesize width,height;
-(void)setWidth:(int)w andHeight:(int)h
{
width = w;
height = h;
}
-(int)area
{
return width * height ;
}
-(int)perimeter
{
return (width + height) *2;
}
-(id)initWithWidth:(int)w andHeight:(int)h
{
if (self = [super init])
{
[self setWidth:w andHeight:h];
}
return self;
}
@end
//Square.h
isMemberOfClass
isKindOfClass
respondsToSelector
instancesRespondToSelector
isSubclassOfClass
#import <Foundation/Foundation.h>
#import "Rectangle.h"
@interface Square : Rectangle
@property int side;
-(id)initWithSide:(int)s;
@end
isMemberOfClass
isKindOfClass
respondsToSelector
instancesRespondToSelector
isSubclassOfClass
#import "Square.h"
@implementation Square
@synthesize side;
-(void)setSide:(int)s
{
width = s;
height = s;
}
-(int)side
{
return width;
}
-(id)initWithSide:(int)s
{
if ([super init])
{
[self setSide:s];
}
return self;
}
@end
isMemberOfClass
isKindOfClass
respondsToSelector
instancesRespondToSelector
isSubclassOfClass