回答:
NSString *name = NSStringFromClass ([NSArray class]);
あなたは逆に戻ることさえできます:
Class arrayClass = NSClassFromString (name);
id anInstance = [[arrayClass alloc] init];
[NSArray class])は実際にはstructです。にstructは、クラスの名前、実装するメソッド、スーパークラスなど、クラスに関する多くの情報が含まれています。これからクラスNSStringFromClassの名前を取り出し、structそれをに変換しNSStringます。クラス名をに保存しないでくださいstatic NSString。パフォーマンスが向上することはありません。
NSClassFromString動作が少し異なります。すべてのクラス名はObjective-Cランタイムのどこかに存在するためNSClassFromString、文字列を取得し、ランタイムによって維持されているクラスのリストを調べて、指定された名前のクラスを探します。見つかった場合はそれを返し、見つからなかった場合はを返しますNil。
class_getName()ランタイムで使用し、C文字列を返します
classNameスクリプト拡張機能によって追加されたメソッドで、Mac OS Xでのみ利用できます。完全に文書化されていないため、または少なくとも最後に確認したわけではないため、動作に細心の注意が必要です。NSStringFromClass()それについて行く正しい方法です。
タイピングを少し減らして別の方法で実行します。
NSString *name = [NSArray description];
+description、理論的には、これはの目的ではないため+description、このメソッドはクラス名を決定するのに脆弱です。
この代替案を検討してください:
const char *name = class_getName(cls);
NSStringオブジェクトを割り当てたり、ASCIIを任意のNSString表現に変換したりする必要がないため、はるかに高速です。これNSStringFromClass()が実装方法です。
NSStringFromClass実装されていますか?static NSString変数にクラス名を格納する方がパフォーマンスが良いですか?