14

Class変数のスーパークラスを取得するために、次の 2 つの方法のどちらが正しいか、または優先されるか疑問に思っています。

  1. Class getSuperclass(Class cls) { return [cls superclass]; }

  2. Class getSuperclass(Class cls) { return class_getSuperclass(cls); }

4

3 に答える 3

25

さて、ドキュメントはこれをclass_getSuperclass()言います:

通常、この関数の代わりに NSObject のスーパークラス メソッドを使用する必要があります。

だから、私はドア#1に行きます。

于 2011-08-21T22:14:10.830 に答える
5

受け入れられた回答は技術的には正しいですが (そうです、それがドキュメントに書かれています)、それは間違った回答です。

[* スーパークラス]は、NSObject のサブクラスであるオブジェクトに対してのみ存在します。

はい、それはあなたが日常的に使用するほとんどのクラスです。

ただし... NSObject サブクラスではない多くのクラスに遭遇する可能性があります。

簡単な例: 「読み込まれたすべてのクラス」を反復処理する場合 (たとえば、objc_getClassList を使用)、[Class superclass] メソッドを使用すると、返されたクラスの多くがアプリをクラッシュさせます。

于 2012-10-08T02:05:07.373 に答える
2

私はそれらが完全に同一であることを確信しています。つまり、NSObjectsuperclassを介し​​て実装されてclass_getSuperclassいます。よくわかりませんが、ビールに賭けます。

于 2011-08-21T22:15:50.500 に答える