Class
変数のスーパークラスを取得するために、次の 2 つの方法のどちらが正しいか、または優先されるか疑問に思っています。
Class getSuperclass(Class cls) { return [cls superclass]; }
Class getSuperclass(Class cls) { return class_getSuperclass(cls); }
Class
変数のスーパークラスを取得するために、次の 2 つの方法のどちらが正しいか、または優先されるか疑問に思っています。
Class getSuperclass(Class cls) { return [cls superclass]; }
Class getSuperclass(Class cls) { return class_getSuperclass(cls); }
さて、ドキュメントはこれをclass_getSuperclass()
言います:
通常、この関数の代わりに NSObject のスーパークラス メソッドを使用する必要があります。
だから、私はドア#1に行きます。
受け入れられた回答は技術的には正しいですが (そうです、それがドキュメントに書かれています)、それは間違った回答です。
[* スーパークラス]は、NSObject のサブクラスであるオブジェクトに対してのみ存在します。
はい、それはあなたが日常的に使用するほとんどのクラスです。
ただし... NSObject サブクラスではない多くのクラスに遭遇する可能性があります。
簡単な例: 「読み込まれたすべてのクラス」を反復処理する場合 (たとえば、objc_getClassList を使用)、[Class superclass] メソッドを使用すると、返されたクラスの多くがアプリをクラッシュさせます。
私はそれらが完全に同一であることを確信しています。つまり、NSObject
はsuperclass
を介して実装されてclass_getSuperclass
います。よくわかりませんが、ビールに賭けます。