NSObject 基类和反射

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "protocol.h"

#pragma mark NSObject的基本使用

void objUse(){
    Student *stu = [[Student alloc] init];
    
    // 判断对象是否是属于某个类 或者子类
    if ([stu isKindOfClass:[Person class]]) {
        NSLog(@"stu 属于Person或者继承自Person");
    }
    
    // 判断对象是否属于某个类( 不包裹子类)
    BOOL result = [stu isMemberOfClass:[Person class]];
    NSLog(@"%i",result);
    
    // 用于判断对象是否遵守了参数提供的协议
    result = [stu conformsToProtocol:@protocol(StudentRuleDelegate)];
    NSLog(@"%i",result);
    
    // 用于判断对象是否拥有参数提供的方法
    result = [stu respondsToSelector:@selector(test)];
    
    NSLog(@"%i",result);
    
    // 延迟调用参数提供的方法
    [stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
    
    [stu release];
}

#pragma mark 反射
void reflect() {
    // 类的反射
    NSString *str = @"Person";
    Class class = NSClassFromString(str);
    
    Person *person = [[class alloc] init];
    
    NSLog(@"%@",person);
    [person release];


    NSString *name = NSStringFromClass([Person class]);
    NSLog(@"%@",name);
    // 方法的反射
    NSString *methodName = @"test";
    SEL selector = NSSelectorFromString(methodName);
   
    Person *p = [[Person alloc] init];
    [p performSelector:selector];
    
    [p release];
    
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        reflect();
        
    }
    return 0;
}
#import <Foundation/Foundation.h>

@interface Person : NSObject 
- (void)test;
@end


#import "Person.h"

@implementation Person
-(void)test
{
    NSLog(@"调用了Person 的test方法");
}
@end

 

@protocol StudentRuleDelegate <NSObject>

//
- (void)test;

- (void)test2:(NSString *) a;

@end

#import "Person.h"
#import "protocol.h"

@interface Student : Person <StudentRuleDelegate>



@end

#import "Student.h"

@implementation Student

- (void)test
{
    NSLog(@"调用了协议中test的方法");
}
- (void)test2:(NSString *) a
{
    NSLog(@"调用了协议中test2的方法%@",a);
}

-(void)dealloc
{
    NSLog(@"%@被销毁了",self);
    
    [super dealloc];
}
@end

 

posted @ 2016-04-13 19:12  赤云西  阅读(160)  评论(0编辑  收藏  举报