NSObjectのいくつかの比較的によく使われる方法と簡単な反射
#pragma mark NSObjectの一般的な方法
//aClassまたはaClassのサブクラスであるか否かを判断する例
- (BOOL)isKindOfClass:(Class)aClass;
//aClassのインスタンスかどうかを判断する(aClassのサブクラスを除く)
- (BOOL)isMemberOfClass:(Class)aClass;
//相手がaProtocolプロトコルを実現しているかどうかを判断する
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
//このクラスのオブジェクトがパラメータ提供の方法を持っているかどうかを判断する
- (BOOL)respondsToSelector:(SEL)aSelector;
//実行を取り消す
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;
@コード例:
#pragma mark反射
//aClassまたはaClassのサブクラスであるか否かを判断する例
- (BOOL)isKindOfClass:(Class)aClass;
//aClassのインスタンスかどうかを判断する(aClassのサブクラスを除く)
- (BOOL)isMemberOfClass:(Class)aClass;
//相手がaProtocolプロトコルを実現しているかどうかを判断する
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
//このクラスのオブジェクトがパラメータ提供の方法を持っているかどうかを判断する
- (BOOL)respondsToSelector:(SEL)aSelector;
//実行を取り消す
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;
@コード例:
Student *stu = [[[Student alloc] init] autorelease];
// isKindOfClass
if ( [stu isKindOfClass:[Person class]] ) {
// NSLog(@"stu Person Person");
}
// isMemberOfClass ( )
BOOL result = [stu isMemberOfClass:[Student class]];
// NSLog(@"%i", result);
// Student test test:
//
[stu test];
//
[stu performSelector:@selector(test)];
//
[stu performSelector:@selector(test2:) withObject:@"abc"];
// 2 test2:
[stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
#pragma mark反射
//
NSString *str = @"Person";
Class class = NSClassFromString(str);
Person *person = [[class alloc] init];
NSLog(@"%@", person);
// Class
NSString *name = NSStringFromClass([Person class]);
//
NSString *method = @"test";
SEL selector = NSSelectorFromString(method);
[person performSelector:selector];
// SEL
NSString *selectorName = NSStringFromSelector(selector);