Object-Cの反射
2566 ワード
[1]classを取得する主な3つの方法
[2]継承関係をチェックする方法
[3]インスタンスメソッドを動的に呼び出す2つの判断方法:
私は反射についてまだ深く理解していません.主なメリットは:1.クラスの文字列名に基づいてclassを取得し、メニューの動的構成に使用できるオブジェクトを取得できます.メソッドを呼び出す前に指定メソッドが実装かどうかを判断し、実装してから呼び出すことができ、無駄なcrash 3を回避することができる.インスタンスがクラスまたはその子クラスに属するか否かを判断することは、強制変換4に用いることができる.プロトコルメソッドを呼び出す前に、crashを回避するために、このプロトコルが実装されているかどうかを判断します.
后で良い理解があった后に补充して、先に记录して、后で调べやすいです
// class
Class clazz = NSClassFromString(@"FKPerson");
// class
clazz = [FKPerson class];
// class
FKPerson *person = [[FKPerson alloc] initWithName:@" "];
clazz = [person class];
[[clazz alloc] init];
[2]継承関係をチェックする方法
// , person clazz clazz
[person isKindOfClass:clazz];
// , person clazz clazz
[FKPerson isSubclassOfClass:clazz];
// , person clazz
[person isMemberOfClass:clazz];
[3]インスタンスメソッドを動的に呼び出す2つの判断方法:
NSLog(@"%d", [[[FKEatable alloc] init] conformsToProtocol:@protocol(FKEatableDelegate)]); // FKEatableDelegate
NSLog(@"%d", [[[FKPerson alloc] init] respondsToSelector:@selector(showInfo)]); // showInfo
:
[person showInfo]; //
[person performSelector:@selector(showInfo) withObject:nil];
objc_msgSend(person, NSSelectorFromString(@"testWithName:age:gender:"), @" ", 20, @" "); // #import
私は反射についてまだ深く理解していません.主なメリットは:1.クラスの文字列名に基づいてclassを取得し、メニューの動的構成に使用できるオブジェクトを取得できます.メソッドを呼び出す前に指定メソッドが実装かどうかを判断し、実装してから呼び出すことができ、無駄なcrash 3を回避することができる.インスタンスがクラスまたはその子クラスに属するか否かを判断することは、強制変換4に用いることができる.プロトコルメソッドを呼び出す前に、crashを回避するために、このプロトコルが実装されているかどうかを判断します.
后で良い理解があった后に补充して、先に记录して、后で调べやすいです