は、私は次のコードを持っている:NSArrayのインスタンスを作成しましたが、NSArrayではなく__NSArrayIのクラスを作成しましたか?
id anArray = [NSArray arrayWithObjects:@1, @2, nil];
NSLog(@"anArrayClass - %@", [anArray class]);
NSLog(@"NSArrayClass - %@", [NSArray class]);
をそして、私は両方の出力を期待し、NSArray
ですが、出力があることが判明:
2016-08-18 21:08:53.628 TestUse[9279:939745] anArrayClass - __NSArrayI
2016-08-18 21:08:53.629 TestUse[9279:939745] NSArrayClass - NSArray
その後、私はCAJTestClass
と呼ばれるテストクラスを作成し、インスタンスを作成しますそのクラスの:
id testInstance = [CAJTestClass new];
NSLog(@"testInstanceClass - %@", [testInstance class]);
NSLog(@"cajTestClass - %@", [CAJTestClass class]);
この時の出力は次のようになります。
2016-08-18 21:08:53.629 TestUse[9279:939745] testInstanceClass - CAJTestClass
2016-08-18 21:08:53.629 TestUse[9279:939745] cajTestClass - CAJTestClass
今回は結果が期待通りです。しかし、なぜ[anArray class]
は__NSArrayI
になるのですか?
「効果的なObjective-C」の説明は、NSArray
が「クラスクラスタ」の一部であるということです(これは継承関係を持つ一連のクラスだと思います)。しかし、CAJTestClass
もNSObject
のサブクラスです。私が間違っている?
編集:すべてのお返事ありがとうございます。しかし、私の疑問はまさに「クラスター」の問題に貢献すれば、私はこの2つのケースで異なる結果になるのですか?
OPはなぜ '[anArray class]'と '[NSArray class]'が別の結果を返すのかを知りたいと思っています。 – rmaddy
それは元の質問です(それは他のすべての回答でうまく答えています)。しかし、編集はなぜNSArrayのための1つの方法であったのかをさらに質問しましたが、CAJTestClassの別の方法でした。なぜなら、 'CAJTestClass'の場合は' NSArray'とまったく異なるコードだったからです。 –
いいえ、答えのどれも2つが異なる理由を説明していません。それはすべて '__NSArrayI'が何であるかを説明します。 – rmaddy