回答:
NSClassFromString()
クラス名を誤って入力したり、存在しないクラスを使用したりするリスクがあります。エラーが発生しても、実行時まではわかりません。代わりに、組み込みのObjective-CタイプClass
を使用して変数を作成する場合、コンパイラーはクラスが存在することを確認します。
たとえば、あなたの.h
:
@property Class NameOfClass;
そしてあなたの中で.m
:
id object = [[NameOfClass alloc] init];
クラス名を誤って入力した場合、またはクラス名が存在しない場合は、コンパイル時にエラーが発生します。また、これはよりクリーンなコードだと思います。
あなたはなしでのObjective-Cで作業している場合はNeXTstep
(OS X
、iOS
、GNUstep
など)をシステムまたはあなただけのこのメソッドはきれいだと思う、あなたは利用することができるObjective-C言語のランタイムライブラリのAPIを。下Objective-C 2.0
:
#import <objc/runtime.h>
//Declaration in the above named file
id objc_getClass(const char* name);
//Usage
id c = objc_getClass("Object");
[ [ c alloc ] free ];
Objective-C(1.0または名前のないバージョン)では、以下を利用します。
#import <objc/objc-api.h>
//Declaration within the above named file
Class objc_get_class( const char* name);
//Usage
Class cls = objc_get_class( "Test" );
id obj = class_create_instance( cls );
[ obj free ];
私は1.0
バージョンをテストしていませんが、2.0
現在運用中のコードで関数を使用しました。私は個人的に利用信じる2.0
:可能な場合、それはより少ないスペース消費として機能するNS機能よりもクリーンであるthe length of the name in bytes + 1 ( null terminator )
対2.0 APIのためthe sum of two pointers (isa, cstring)
、size_t length (cstring_length)
とlength of the string in bytes + 1
のためのNeXTSTEP
API。