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