回答:
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
変数にクラス名を格納する方がパフォーマンスが良いですか?