2011-06-29 4 views

答えて

5

NSClassFromString()は、指定された名前のランタイムに登録されているクラスを返します。 NSBundleのclassNamed:は、指定された名前のクラスをバンドル内に返します。バンドルはまだロードされていない可能性があります(必要に応じてバンドルをロードすることを意味します)。

しかし、別の方法:NSBundleはおそらくあなたのアプリケーションランタイムにロードされたすべてのクラスについてはわかりません(メインバンドルの場合はほとんどのクラスについて知っているでしょう)。逆に、アプリケーションのランタイムは、ロードされる前にバンドル内のすべてのクラスについて認識しません。

+2

私は、 '+ classNamed:'がそれを登録してロードすると思われます。 – bbum

+0

@bbum:そうだよ。明らかにした。 – Chuck

+2

@bbum: 'classNamed:'はインスタンスメソッド( '-classNamed:')であり、クラスメソッドではありません。それは私に別の違いがもたらされます。 'classNamed:'をバンドルに送信すると、そのクラスの*特定のバンドル*が要求されます。クラスがそのバンドルにない場合(それが別のバンドルにあるか、存在しないために)、 'Nil'を取得します。 'NSClassFromString'はどんなバンドルがそれを提供しても、クラスを返します。 –